--- /dev/null
+# Ignore the following files
+*~
+*.[oa]
+*.diff
+*.kate-swp
+*.kdev4
+.kdev_include_paths
+*.kdevelop.pcs
+*.moc
+*.moc.cpp
+*.orig
+*.user
+.*.swp
+.swp.*
+Doxyfile
+Makefile
+avail
+random_seed
+/build*/
+CMakeLists.txt.user*
+*.unc-backup*
+.cmake/
+/.clang-format
+/compile_commands.json
+.clangd
+.idea
+/cmake-build*
+.cache
--- /dev/null
+cmake_minimum_required(VERSION 3.16)
+
+set(KF_VERSION "5.85.0") # handled by release scripts
+project(KCoreAddons VERSION ${KF_VERSION})
+
+include(FeatureSummary)
+find_package(ECM 5.85.0 NO_MODULE)
+set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules")
+feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
+
+
+set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
+
+include(KDEInstallDirs)
+include(KDECMakeSettings)
+include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
+include(KDEGitCommitHooks)
+
+include(ECMGenerateExportHeader)
+include(CMakePackageConfigHelpers)
+include(ECMSetupVersion)
+include(ECMGenerateHeaders)
+include(ECMQtDeclareLoggingCategory)
+include(ECMAddQch)
+include(ECMSetupQtPluginMacroNames)
+
+set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].")
+
+option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF)
+add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)")
+
+set(REQUIRED_QT_VERSION 5.15.0)
+find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Core)
+
+ecm_setup_qtplugin_macro_names(
+ JSON_NONE
+ "K_PLUGIN_FACTORY"
+ JSON_ARG2
+ "K_PLUGIN_FACTORY_WITH_JSON"
+ "K_PLUGIN_CLASS_WITH_JSON"
+ CONFIG_CODE_VARIABLE
+ PACKAGE_SETUP_AUTOMOC_VARIABLES
+)
+
+if(NOT WIN32)
+ find_package(Threads REQUIRED)
+endif()
+
+# Configure checks for kdirwatch
+find_package(FAM)
+
+set_package_properties(FAM PROPERTIES
+ PURPOSE "Provides file alteration notification facilities using a separate service. FAM provides additional support for NFS.")
+
+set(HAVE_FAM ${FAM_FOUND})
+
+option(ENABLE_INOTIFY "Try to use inotify for directory monitoring" ON)
+if(ENABLE_INOTIFY)
+ # Find libinotify
+ find_package(Inotify)
+ set_package_properties(Inotify PROPERTIES
+ PURPOSE "Filesystem alteration notifications using inotify")
+ set(HAVE_SYS_INOTIFY_H ${Inotify_FOUND})
+else()
+ set(HAVE_SYS_INOTIFY_H FALSE)
+endif()
+
+set(HAVE_PROCSTAT FALSE)
+string(REGEX MATCH "[Bb][Ss][Dd]" BSDLIKE ${CMAKE_SYSTEM_NAME})
+if (BSDLIKE)
+ option(ENABLE_PROCSTAT "Try to use libprocstat for process information (for BSD-like systems)" ON)
+ if (ENABLE_PROCSTAT)
+ # Find libprocstat
+ find_package(Procstat)
+ set_package_properties(Procstat PROPERTIES
+ PURPOSE "Process information using libprocstat")
+ set(HAVE_PROCSTAT ${PROCSTAT_FOUND})
+ endif()
+ if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+ set_package_properties(Procstat PROPERTIES
+ TYPE REQUIRED
+ )
+ endif()
+endif()
+
+# Generate io/config-kdirwatch.h
+configure_file(src/lib/io/config-kdirwatch.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/src/lib/io/config-kdirwatch.h)
+
+include(ECMPoQmTools)
+
+ecm_setup_version(PROJECT VARIABLE_PREFIX KCOREADDONS
+ VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_version.h"
+ PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfigVersion.cmake"
+ SOVERSION 5)
+
+
+ecm_install_po_files_as_qm(po)
+
+kde_enable_exceptions()
+
+
+add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x050e00) # Not 050f00 because of qsrand
+
+add_subdirectory(src)
+if (BUILD_TESTING)
+ add_subdirectory(autotests)
+ add_subdirectory(tests)
+endif()
+
+# create a Config.cmake and a ConfigVersion.cmake file and install them
+set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5CoreAddons")
+
+if (BUILD_QCH)
+ ecm_install_qch_export(
+ TARGETS KF5CoreAddons_QCH
+ FILE KF5CoreAddonsQchTargets.cmake
+ DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ COMPONENT Devel
+ )
+ set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5CoreAddonsQchTargets.cmake\")")
+endif()
+
+configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/KF5CoreAddonsConfig.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfig.cmake"
+ INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
+ )
+
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfig.cmake"
+ "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfigVersion.cmake"
+ "${CMAKE_CURRENT_SOURCE_DIR}/KF5CoreAddonsMacros.cmake"
+ DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
+ COMPONENT Devel )
+
+install(EXPORT KF5CoreAddonsTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5CoreAddonsTargets.cmake NAMESPACE KF5:: )
+install(EXPORT KF5CoreAddonsToolingTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5CoreAddonsToolingTargets.cmake NAMESPACE KF5:: )
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_version.h
+ DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5} COMPONENT Devel )
+
+feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
+
+kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
--- /dev/null
+@PACKAGE_INIT@
+
+include(CMakeFindDependencyMacro)
+find_dependency(Qt5Core @REQUIRED_QT_VERSION@)
+
+@PACKAGE_SETUP_AUTOMOC_VARIABLES@
+
+if(CMAKE_CROSSCOMPILING AND KF5_HOST_TOOLING)
+ find_file(KCOREADDONS_TARGETSFILE KF5CoreAddons/KF5CoreAddonsToolingTargets.cmake
+ PATHS ${KF5_HOST_TOOLING} ${CMAKE_CURRENT_LIST_DIR}
+ NO_DEFAULT_PATH
+ NO_CMAKE_FIND_ROOT_PATH)
+ include("${KCOREADDONS_TARGETSFILE}")
+else()
+ include("${CMAKE_CURRENT_LIST_DIR}/KF5CoreAddonsToolingTargets.cmake")
+ if(CMAKE_CROSSCOMPILING AND DESKTOPTOJSON_EXECUTABLE)
+ set_target_properties(KF5::desktoptojson PROPERTIES IMPORTED_LOCATION_NONE ${DESKTOPTOJSON_EXECUTABLE})
+ set_target_properties(KF5::desktoptojson PROPERTIES IMPORTED_LOCATION ${DESKTOPTOJSON_EXECUTABLE})
+ endif()
+endif()
+include("${CMAKE_CURRENT_LIST_DIR}/KF5CoreAddonsTargets.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/KF5CoreAddonsMacros.cmake")
+@PACKAGE_INCLUDE_QCHTARGETS@
--- /dev/null
+#
+# kcoreaddons_desktop_to_json(target desktopfile
+# DEFAULT_SERVICE_TYPE | SERVICE_TYPES <file> [<file> [...]]
+# [OUTPUT_DIR dir] [COMPAT_MODE])
+#
+# This macro uses desktoptojson to generate a json file from a plugin
+# description in a .desktop file. The generated file can be compiled
+# into the plugin using the K_PLUGIN_FACTORY_WITH_JSON (cpp) macro.
+#
+# All files in SERVICE_TYPES will be parsed by desktoptojson to ensure that the generated
+# json uses the right data type (string, string list, int, double or bool) for all of the
+# properties. If your application does not have any custom properties defined you should pass
+# DEFAULT_SERVICE_TYPE instead. It is an error if neither of these arguments is given.
+# This is done in order to ensure that all applications explicitly choose the right service
+# type and don't have runtime errors because of the data being wrong (QJsonValue does not
+# perform any type conversions).
+#
+# If COMPAT_MODE is passed as an argument the generated JSON file will be compatible with
+# the metadata format used by KPluginInfo (from KService), otherwise it will default to
+# the new format that is used by KPluginMetaData (from KCoreAddons).
+#
+# If OUTPUT_DIR is set the generated file will be created inside <dir> instead of in
+# ${CMAKE_CURRENT_BINARY_DIR}
+#
+# Example:
+#
+# kcoreaddons_desktop_to_json(plasma_engine_time plasma-dataengine-time.desktop
+# SERVICE_TYPES plasma-dataengine.desktop)
+
+function(kcoreaddons_desktop_to_json target desktop)
+ get_filename_component(desktop_basename ${desktop} NAME_WE) # allow passing an absolute path to the .desktop
+ cmake_parse_arguments(DESKTOP_TO_JSON "COMPAT_MODE;DEFAULT_SERVICE_TYPE" "OUTPUT_DIR" "SERVICE_TYPES" ${ARGN})
+
+ if(DESKTOP_TO_JSON_OUTPUT_DIR)
+ set(json "${DESKTOP_TO_JSON_OUTPUT_DIR}/${desktop_basename}.json")
+ else()
+ set(json "${CMAKE_CURRENT_BINARY_DIR}/${desktop_basename}.json")
+ endif()
+
+ if(CMAKE_VERSION VERSION_LESS 2.8.12.20140127 OR "${target}" STREQUAL "")
+ _desktop_to_json_cmake28(${desktop} ${json} ${DESKTOP_TO_JSON_COMPAT_MODE})
+ return()
+ elseif(MSVC_IDE AND CMAKE_VERSION VERSION_LESS 3.0)
+ # autogen dependencies for visual studio generator are broken until cmake commit 2ed0d06
+ _desktop_to_json_cmake28(${desktop} ${json} ${DESKTOP_TO_JSON_COMPAT_MODE})
+ return()
+ endif()
+ set(command KF5::desktoptojson -i ${desktop} -o ${json})
+ if(DESKTOP_TO_JSON_COMPAT_MODE)
+ list(APPEND command -c)
+ endif()
+ if(DESKTOP_TO_JSON_SERVICE_TYPES)
+ foreach(type ${DESKTOP_TO_JSON_SERVICE_TYPES})
+ if (EXISTS ${KDE_INSTALL_FULL_KSERVICETYPES5DIR}/${type})
+ set(type ${KDE_INSTALL_FULL_KSERVICETYPES5DIR}/${type})
+ endif()
+ list(APPEND command -s ${type})
+ endforeach()
+ endif()
+
+ file(RELATIVE_PATH relativejson ${CMAKE_CURRENT_BINARY_DIR} ${json})
+ add_custom_command(
+ OUTPUT ${json}
+ COMMAND ${command}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DEPENDS ${desktop}
+ COMMENT "Generating ${relativejson}"
+ )
+ set_property(TARGET ${target} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS ${json})
+endfunction()
+
+function(_desktop_to_json_cmake28 desktop json compat)
+ # This function runs desktoptojson at *configure* time, ie, when CMake runs.
+ # This is necessary with CMake < 3.0.0 because the .json file must be
+ # generated before moc is run, and there was no way until CMake 3.0.0 to
+ # define a target as a dependency of the automoc target.
+ message("Using CMake 2.8 way to call desktoptojson")
+ get_target_property(DESKTOPTOJSON_LOCATION KF5::desktoptojson LOCATION)
+ if(compat)
+ execute_process(
+ COMMAND ${DESKTOPTOJSON_LOCATION} -i ${desktop} -o ${json} -c
+ RESULT_VARIABLE result
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+ else()
+ execute_process(
+ COMMAND ${DESKTOPTOJSON_LOCATION} -i ${desktop} -o ${json}
+ RESULT_VARIABLE result
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+ endif()
+
+ if (NOT result EQUAL 0)
+ message(FATAL_ERROR "Generating ${json} failed")
+ endif()
+endfunction()
+
+#
+# kcoreaddons_add_plugin(plugin_name
+# [SOURCES <src> [<src> [...]]] # optional since 5.83, required before
+# [JSON "pluginname.json"]
+# [INSTALL_NAMESPACE "servicename"]
+# )
+#
+# This macro helps simplifying the creation of plugins for KPluginFactory
+# based systems.
+# It will create a plugin given the SOURCES list and the INSTALL_NAMESPACE so that
+# the plugin is installed with the rest of the plugins from the same sub-system,
+# within ${KDE_INSTALL_PLUGINDIR}.
+# The JSON parameter is deprecated since 5.85, because it is not needed when the project is properly set up using
+# the ECMSetupQtPluginMacroNames module. In case of plugin export macros provided by the KDE Frameworks this is already done and the parameter
+# can be dropped with any older KF5 requirement.
+# In case you generate the JSON files during the build it should be manually added to the AUTOGEN_TARGET_DEPENDS property,
+# the kcoreaddons_desktop_to_json already does this for the generated file.
+#
+# Example:
+# kcoreaddons_add_plugin(kdeconnect_share SOURCES ${kdeconnect_share_SRCS} INSTALL_NAMESPACE "kdeconnect")
+#
+# Since 5.10.0
+
+function(kcoreaddons_add_plugin plugin)
+ set(options)
+ set(oneValueArgs JSON INSTALL_NAMESPACE)
+ set(multiValueArgs SOURCES)
+ cmake_parse_arguments(KCA_ADD_PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ add_library(${plugin} MODULE ${KCA_ADD_PLUGIN_SOURCES})
+
+ if ("${ECM_GLOBAL_FIND_VERSION}" VERSION_GREATER_EQUAL "5.85.0" AND KCA_ADD_PLUGIN_JSON)
+ message(WARNING "Setting the JSON parameter is deprecated, see function docs for details")
+ endif()
+ get_filename_component(json "${KCA_ADD_PLUGIN_JSON}" REALPATH)
+ set_property(TARGET ${plugin} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS ${json})
+
+ # If find_package(ECM 5.38) or higher is called, output the plugin in a INSTALL_NAMESPACE subfolder.
+ # See https://community.kde.org/Guidelines_and_HOWTOs/Making_apps_run_uninstalled
+ if(NOT ("${ECM_GLOBAL_FIND_VERSION}" VERSION_LESS "5.38.0"))
+ set_target_properties(${plugin} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${KCA_ADD_PLUGIN_INSTALL_NAMESPACE}")
+ endif()
+
+ if (NOT KCA_ADD_PLUGIN_INSTALL_NAMESPACE)
+ message(FATAL_ERROR "Must specify INSTALL_NAMESPACE for ${plugin}")
+ endif()
+
+ if(NOT ANDROID)
+ install(TARGETS ${plugin} DESTINATION ${KDE_INSTALL_PLUGINDIR}/${KCA_ADD_PLUGIN_INSTALL_NAMESPACE})
+ else()
+ string(REPLACE "/" "_" pluginprefix "${KCA_ADD_PLUGIN_INSTALL_NAMESPACE}")
+ set_property(TARGET ${plugin} PROPERTY PREFIX "libplugins_")
+ if(NOT pluginprefix STREQUAL "")
+ set_property(TARGET ${plugin} APPEND_STRING PROPERTY PREFIX "${pluginprefix}_")
+ endif()
+ install(TARGETS ${plugin} DESTINATION ${KDE_INSTALL_PLUGINDIR})
+ endif()
+endfunction()
--- /dev/null
+Copyright (c) <year> <owner>. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+Copyright (c) <year> <owner>. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors
+may be used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+Creative Commons Legal Code
+
+CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES
+NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE
+AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
+ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE
+OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS
+LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION
+OR WORKS PROVIDED HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer exclusive
+Copyright and Related Rights (defined below) upon the creator and subsequent
+owner(s) (each and all, an "owner") of an original work of authorship and/or
+a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later claims
+of infringement build upon, modify, incorporate in other works, reuse and
+redistribute as freely as possible in any form whatsoever and for any purposes,
+including without limitation commercial purposes. These owners may contribute
+to the Commons to promote the ideal of a free culture and the further production
+of creative, cultural and scientific works, or to gain reputation or greater
+distribution for their Work in part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with
+a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or
+her Copyright and Related Rights in the Work and the meaning and intended
+legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be protected
+by copyright and related or neighboring rights ("Copyright and Related Rights").
+Copyright and Related Rights include, but are not limited to, the following:
+
+i. the right to reproduce, adapt, distribute, perform, display, communicate,
+and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+iii. publicity and privacy rights pertaining to a person's image or likeness
+depicted in a Work;
+
+iv. rights protecting against unfair competition in regards to a Work, subject
+to the limitations in paragraph 4(a), below;
+
+v. rights protecting the extraction, dissemination, use and reuse of data
+in a Work;
+
+vi. database rights (such as those arising under Directive 96/9/EC of the
+European Parliament and of the Council of 11 March 1996 on the legal protection
+of databases, and under any national implementation thereof, including any
+amended or successor version of such directive); and
+
+vii. other similar, equivalent or corresponding rights throughout the world
+based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time extensions),
+(iii) in any current or future medium and for any number of copies, and (iv)
+for any purpose whatsoever, including without limitation commercial, advertising
+or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the
+benefit of each member of the public at large and to the detriment of Affirmer's
+heirs and successors, fully intending that such Waiver shall not be subject
+to revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account Affirmer's
+express Statement of Purpose. In addition, to the extent the Waiver is so
+judged Affirmer hereby grants to each affected person a royalty-free, non
+transferable, non sublicensable, non exclusive, irrevocable and unconditional
+license to exercise Affirmer's Copyright and Related Rights in the Work (i)
+in all territories worldwide, (ii) for the maximum duration provided by applicable
+law or treaty (including future time extensions), (iii) in any current or
+future medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional purposes
+(the "License"). The License shall be deemed effective as of the date CC0
+was applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder of
+the License, and in such case Affirmer hereby affirms that he or she will
+not (i) exercise any of his or her remaining Copyright and Related Rights
+in the Work or (ii) assert any associated claims and causes of action with
+respect to the Work, in either case contrary to Affirmer's express Statement
+of Purpose.
+
+ 4. Limitations and Disclaimers.
+
+a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered,
+licensed or otherwise affected by this document.
+
+b. Affirmer offers the Work as-is and makes no representations or warranties
+of any kind concerning the Work, express, implied, statutory or otherwise,
+including without limitation warranties of title, merchantability, fitness
+for a particular purpose, non infringement, or the absence of latent or other
+defects, accuracy, or the present or absence of errors, whether or not discoverable,
+all to the greatest extent permissible under applicable law.
+
+c. Affirmer disclaims responsibility for clearing rights of other persons
+that may apply to the Work or any use thereof, including without limitation
+any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims
+responsibility for obtaining any necessary consents, permissions or other
+rights required for any use of the Work.
+
+d. Affirmer understands and acknowledges that Creative Commons is not a party
+to this document and has no duty or obligation with respect to this CC0 or
+use of the Work.
--- /dev/null
+GNU GENERAL PUBLIC LICENSE
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users. This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it. (Some other Free Software Foundation software
+is covered by the GNU Lesser General Public License instead.) You can apply
+it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you
+wish), that you receive source code or can get it if you want it, that you
+can change the software or use pieces of it in new free programs; and that
+you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of
+the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or
+for a fee, you must give the recipients all the rights that you have. You
+must make sure that they, too, receive or can get the source code. And you
+must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software. If
+the software is modified by someone else and passed on, we want its recipients
+to know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that redistributors of a free program will individually
+obtain patent licenses, in effect making the program proprietary. To prevent
+this, we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms
+of this General Public License. The "Program", below, refers to any such program
+or work, and a "work based on the Program" means either the Program or any
+derivative work under copyright law: that is to say, a work containing the
+Program or a portion of it, either verbatim or with modifications and/or translated
+into another language. (Hereinafter, translation is included without limitation
+in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running the Program
+is not restricted, and the output from the Program is covered only if its
+contents constitute a work based on the Program (independent of having been
+made by running the Program). Whether that is true depends on what the Program
+does.
+
+1. You may copy and distribute verbatim copies of the Program's source code
+as you receive it, in any medium, provided that you conspicuously and appropriately
+publish on each copy an appropriate copyright notice and disclaimer of warranty;
+keep intact all the notices that refer to this License and to the absence
+of any warranty; and give any other recipients of the Program a copy of this
+License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it,
+thus forming a work based on the Program, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all
+of these conditions:
+
+a) You must cause the modified files to carry prominent notices stating that
+you changed the files and the date of any change.
+
+b) You must cause any work that you distribute or publish, that in whole or
+in part contains or is derived from the Program or any part thereof, to be
+licensed as a whole at no charge to all third parties under the terms of this
+License.
+
+c) If the modified program normally reads commands interactively when run,
+you must cause it, when started running for such interactive use in the most
+ordinary way, to print or display an announcement including an appropriate
+copyright notice and a notice that there is no warranty (or else, saying that
+you provide a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this License.
+(Exception: if the Program itself is interactive but does not normally print
+such an announcement, your work based on the Program is not required to print
+an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Program, the distribution of the whole must be
+on the terms of this License, whose permissions for other licensees extend
+to the entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise
+the right to control the distribution of derivative or collective works based
+on the Program.
+
+In addition, mere aggregation of another work not based on the Program with
+the Program (or with a work based on the Program) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section
+2) in object code or executable form under the terms of Sections 1 and 2 above
+provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable source code,
+which must be distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least three years, to give
+any third party, for a charge no more than your cost of physically performing
+source distribution, a complete machine-readable copy of the corresponding
+source code, to be distributed under the terms of Sections 1 and 2 above on
+a medium customarily used for software interchange; or,
+
+c) Accompany it with the information you received as to the offer to distribute
+corresponding source code. (This alternative is allowed only for noncommercial
+distribution and only if you received the program in object code or executable
+form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making
+modifications to it. For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and installation
+of the executable. However, as a special exception, the source code distributed
+need not include anything that is normally distributed (in either source or
+binary form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component itself
+accompanies the executable.
+
+If distribution of executable or object code is made by offering access to
+copy from a designated place, then offering equivalent access to copy the
+source code from the same place counts as distribution of the source code,
+even though third parties are not compelled to copy the source along with
+the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except
+as expressly provided under this License. Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses terminated
+so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed
+it. However, nothing else grants you permission to modify or distribute the
+Program or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the Program
+(or any work based on the Program), you indicate your acceptance of this License
+to do so, and all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program),
+the recipient automatically receives a license from the original licensor
+to copy, distribute or modify the Program subject to these terms and conditions.
+You may not impose any further restrictions on the recipients' exercise of
+the rights granted herein. You are not responsible for enforcing compliance
+by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement
+or for any other reason (not limited to patent issues), conditions are imposed
+on you (whether by court order, agreement or otherwise) that contradict the
+conditions of this License, they do not excuse you from the conditions of
+this License. If you cannot distribute so as to satisfy simultaneously your
+obligations under this License and any other pertinent obligations, then as
+a consequence you may not distribute the Program at all. For example, if a
+patent license would not permit royalty-free redistribution of the Program
+by all those who receive copies directly or indirectly through you, then the
+only way you could satisfy both it and this License would be to refrain entirely
+from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents
+or other property right claims or to contest validity of any such claims;
+this section has the sole purpose of protecting the integrity of the free
+software distribution system, which is implemented by public license practices.
+Many people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose
+that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original copyright
+holder who places the Program under this License may add an explicit geographical
+distribution limitation excluding those countries, so that distribution is
+permitted only in or among countries not thus excluded. In such case, this
+License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of
+the General Public License from time to time. Such new versions will be similar
+in spirit to the present version, but may differ in detail to address new
+problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies
+a version number of this License which applies to it and "any later version",
+you have the option of following the terms and conditions either of that version
+or of any later version published by the Free Software Foundation. If the
+Program does not specify a version number of this License, you may choose
+any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission. For software which is copyrighted by the Free Software Foundation,
+write to the Free Software Foundation; we sometimes make exceptions for this.
+Our decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing and reuse
+of software generally.
+
+ NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
+"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
+OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
+OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
+OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
+OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+<one line to give the program's name and an idea of what it does.>
+
+Copyright (C)< yyyy> <name of author>
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
+Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when
+it starts in an interactive mode:
+
+Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software,
+and you are welcome to redistribute it under certain conditions; type `show
+c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may be
+called something other than `show w' and `show c'; they could even be mouse-clicks
+or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the program, if necessary. Here
+is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision'
+(which makes passes at compilers) written by James Hacker.
+
+<signature of Ty Coon >, 1 April 1989 Ty Coon, President of Vice This General
+Public License does not permit incorporating your program into proprietary
+programs. If your program is a subroutine library, you may consider it more
+useful to permit linking proprietary applications with the library. If this
+is what you want to do, use the GNU Lesser General Public License instead
+of this License.
--- /dev/null
+GNU GENERAL PUBLIC LICENSE
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users. This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it. (Some other Free Software Foundation software
+is covered by the GNU Lesser General Public License instead.) You can apply
+it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you
+wish), that you receive source code or can get it if you want it, that you
+can change the software or use pieces of it in new free programs; and that
+you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of
+the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or
+for a fee, you must give the recipients all the rights that you have. You
+must make sure that they, too, receive or can get the source code. And you
+must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software. If
+the software is modified by someone else and passed on, we want its recipients
+to know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that redistributors of a free program will individually
+obtain patent licenses, in effect making the program proprietary. To prevent
+this, we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms
+of this General Public License. The "Program", below, refers to any such program
+or work, and a "work based on the Program" means either the Program or any
+derivative work under copyright law: that is to say, a work containing the
+Program or a portion of it, either verbatim or with modifications and/or translated
+into another language. (Hereinafter, translation is included without limitation
+in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running the Program
+is not restricted, and the output from the Program is covered only if its
+contents constitute a work based on the Program (independent of having been
+made by running the Program). Whether that is true depends on what the Program
+does.
+
+1. You may copy and distribute verbatim copies of the Program's source code
+as you receive it, in any medium, provided that you conspicuously and appropriately
+publish on each copy an appropriate copyright notice and disclaimer of warranty;
+keep intact all the notices that refer to this License and to the absence
+of any warranty; and give any other recipients of the Program a copy of this
+License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it,
+thus forming a work based on the Program, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all
+of these conditions:
+
+a) You must cause the modified files to carry prominent notices stating that
+you changed the files and the date of any change.
+
+b) You must cause any work that you distribute or publish, that in whole or
+in part contains or is derived from the Program or any part thereof, to be
+licensed as a whole at no charge to all third parties under the terms of this
+License.
+
+c) If the modified program normally reads commands interactively when run,
+you must cause it, when started running for such interactive use in the most
+ordinary way, to print or display an announcement including an appropriate
+copyright notice and a notice that there is no warranty (or else, saying that
+you provide a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this License.
+(Exception: if the Program itself is interactive but does not normally print
+such an announcement, your work based on the Program is not required to print
+an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Program, the distribution of the whole must be
+on the terms of this License, whose permissions for other licensees extend
+to the entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise
+the right to control the distribution of derivative or collective works based
+on the Program.
+
+In addition, mere aggregation of another work not based on the Program with
+the Program (or with a work based on the Program) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section
+2) in object code or executable form under the terms of Sections 1 and 2 above
+provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable source code,
+which must be distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least three years, to give
+any third party, for a charge no more than your cost of physically performing
+source distribution, a complete machine-readable copy of the corresponding
+source code, to be distributed under the terms of Sections 1 and 2 above on
+a medium customarily used for software interchange; or,
+
+c) Accompany it with the information you received as to the offer to distribute
+corresponding source code. (This alternative is allowed only for noncommercial
+distribution and only if you received the program in object code or executable
+form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making
+modifications to it. For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and installation
+of the executable. However, as a special exception, the source code distributed
+need not include anything that is normally distributed (in either source or
+binary form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component itself
+accompanies the executable.
+
+If distribution of executable or object code is made by offering access to
+copy from a designated place, then offering equivalent access to copy the
+source code from the same place counts as distribution of the source code,
+even though third parties are not compelled to copy the source along with
+the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except
+as expressly provided under this License. Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses terminated
+so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed
+it. However, nothing else grants you permission to modify or distribute the
+Program or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the Program
+(or any work based on the Program), you indicate your acceptance of this License
+to do so, and all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program),
+the recipient automatically receives a license from the original licensor
+to copy, distribute or modify the Program subject to these terms and conditions.
+You may not impose any further restrictions on the recipients' exercise of
+the rights granted herein. You are not responsible for enforcing compliance
+by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement
+or for any other reason (not limited to patent issues), conditions are imposed
+on you (whether by court order, agreement or otherwise) that contradict the
+conditions of this License, they do not excuse you from the conditions of
+this License. If you cannot distribute so as to satisfy simultaneously your
+obligations under this License and any other pertinent obligations, then as
+a consequence you may not distribute the Program at all. For example, if a
+patent license would not permit royalty-free redistribution of the Program
+by all those who receive copies directly or indirectly through you, then the
+only way you could satisfy both it and this License would be to refrain entirely
+from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents
+or other property right claims or to contest validity of any such claims;
+this section has the sole purpose of protecting the integrity of the free
+software distribution system, which is implemented by public license practices.
+Many people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose
+that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original copyright
+holder who places the Program under this License may add an explicit geographical
+distribution limitation excluding those countries, so that distribution is
+permitted only in or among countries not thus excluded. In such case, this
+License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of
+the General Public License from time to time. Such new versions will be similar
+in spirit to the present version, but may differ in detail to address new
+problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies
+a version number of this License which applies to it and "any later version",
+you have the option of following the terms and conditions either of that version
+or of any later version published by the Free Software Foundation. If the
+Program does not specify a version number of this License, you may choose
+any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission. For software which is copyrighted by the Free Software Foundation,
+write to the Free Software Foundation; we sometimes make exceptions for this.
+Our decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing and reuse
+of software generally.
+
+ NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
+"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
+OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
+OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
+OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
+OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+<one line to give the program's name and an idea of what it does.>
+
+Copyright (C) <yyyy> <name of author>
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
+Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when
+it starts in an interactive mode:
+
+Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software,
+and you are welcome to redistribute it under certain conditions; type `show
+c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may be
+called something other than `show w' and `show c'; they could even be mouse-clicks
+or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the program, if necessary. Here
+is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision'
+(which makes passes at compilers) written by James Hacker.
+
+<signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General
+Public License does not permit incorporating your program into proprietary
+programs. If your program is a subroutine library, you may consider it more
+useful to permit linking proprietary applications with the library. If this
+is what you want to do, use the GNU Lesser General Public License instead
+of this License.
--- /dev/null
+GNU GENERAL PUBLIC LICENSE
+
+Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The GNU General Public License is a free, copyleft license for software and
+other kinds of works.
+
+The licenses for most software and other practical works are designed to take
+away your freedom to share and change the works. By contrast, the GNU General
+Public License is intended to guarantee your freedom to share and change all
+versions of a program--to make sure it remains free software for all its users.
+We, the Free Software Foundation, use the GNU General Public License for most
+of our software; it applies also to any other work released this way by its
+authors. You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for them if you wish), that
+you receive source code or can get it if you want it, that you can change
+the software or use pieces of it in new free programs, and that you know you
+can do these things.
+
+To protect your rights, we need to prevent others from denying you these rights
+or asking you to surrender the rights. Therefore, you have certain responsibilities
+if you distribute copies of the software, or if you modify it: responsibilities
+to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or
+for a fee, you must pass on to the recipients the same freedoms that you received.
+You must make sure that they, too, receive or can get the source code. And
+you must show them these terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps: (1) assert
+copyright on the software, and (2) offer you this License giving you legal
+permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that
+there is no warranty for this free software. For both users' and authors'
+sake, the GPL requires that modified versions be marked as changed, so that
+their problems will not be attributed erroneously to authors of previous versions.
+
+Some devices are designed to deny users access to install or run modified
+versions of the software inside them, although the manufacturer can do so.
+This is fundamentally incompatible with the aim of protecting users' freedom
+to change the software. The systematic pattern of such abuse occurs in the
+area of products for individuals to use, which is precisely where it is most
+unacceptable. Therefore, we have designed this version of the GPL to prohibit
+the practice for those products. If such problems arise substantially in other
+domains, we stand ready to extend this provision to those domains in future
+versions of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents. States
+should not allow patents to restrict development and use of software on general-purpose
+computers, but in those that do, we wish to avoid the special danger that
+patents applied to a free program could make it effectively proprietary. To
+prevent this, the GPL assures that patents cannot be used to render the program
+non-free.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+"Copyright" also means copyright-like laws that apply to other kinds of works,
+such as semiconductor masks.
+
+"The Program" refers to any copyrightable work licensed under this License.
+Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals
+or organizations.
+
+To "modify" a work means to copy from or adapt all or part of the work in
+a fashion requiring copyright permission, other than the making of an exact
+copy. The resulting work is called a "modified version" of the earlier work
+or a work "based on" the earlier work.
+
+A "covered work" means either the unmodified Program or a work based on the
+Program.
+
+To "propagate" a work means to do anything with it that, without permission,
+would make you directly or secondarily liable for infringement under applicable
+copyright law, except executing it on a computer or modifying a private copy.
+Propagation includes copying, distribution (with or without modification),
+making available to the public, and in some countries other activities as
+well.
+
+To "convey" a work means any kind of propagation that enables other parties
+to make or receive copies. Mere interaction with a user through a computer
+network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays "Appropriate Legal Notices" to the
+extent that it includes a convenient and prominently visible feature that
+(1) displays an appropriate copyright notice, and (2) tells the user that
+there is no warranty for the work (except to the extent that warranties are
+provided), that licensees may convey the work under this License, and how
+to view a copy of this License. If the interface presents a list of user commands
+or options, such as a menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+The "source code" for a work means the preferred form of the work for making
+modifications to it. "Object code" means any non-source form of a work.
+
+A "Standard Interface" means an interface that either is an official standard
+defined by a recognized standards body, or, in the case of interfaces specified
+for a particular programming language, one that is widely used among developers
+working in that language.
+
+The "System Libraries" of an executable work include anything, other than
+the work as a whole, that (a) is included in the normal form of packaging
+a Major Component, but which is not part of that Major Component, and (b)
+serves only to enable use of the work with that Major Component, or to implement
+a Standard Interface for which an implementation is available to the public
+in source code form. A "Major Component", in this context, means a major essential
+component (kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to produce
+the work, or an object code interpreter used to run it.
+
+The "Corresponding Source" for a work in object code form means all the source
+code needed to generate, install, and (for an executable work) run the object
+code and to modify the work, including scripts to control those activities.
+However, it does not include the work's System Libraries, or general-purpose
+tools or generally available free programs which are used unmodified in performing
+those activities but which are not part of the work. For example, Corresponding
+Source includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically linked
+subprograms that the work is specifically designed to require, such as by
+intimate data communication or control flow between those subprograms and
+other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate
+automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is that same work.
+
+ 2. Basic Permissions.
+
+All rights granted under this License are granted for the term of copyright
+on the Program, and are irrevocable provided the stated conditions are met.
+This License explicitly affirms your unlimited permission to run the unmodified
+Program. The output from running a covered work is covered by this License
+only if the output, given its content, constitutes a covered work. This License
+acknowledges your rights of fair use or other equivalent, as provided by copyright
+law.
+
+You may make, run and propagate covered works that you do not convey, without
+conditions so long as your license otherwise remains in force. You may convey
+covered works to others for the sole purpose of having them make modifications
+exclusively for you, or provide you with facilities for running those works,
+provided that you comply with the terms of this License in conveying all material
+for which you do not control copyright. Those thus making or running the covered
+works for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of your copyrighted
+material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the conditions
+stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological measure
+under any applicable law fulfilling obligations under article 11 of the WIPO
+copyright treaty adopted on 20 December 1996, or similar laws prohibiting
+or restricting circumvention of such measures.
+
+When you convey a covered work, you waive any legal power to forbid circumvention
+of technological measures to the extent such circumvention is effected by
+exercising rights under this License with respect to the covered work, and
+you disclaim any intention to limit operation or modification of the work
+as a means of enforcing, against the work's users, your or third parties'
+legal rights to forbid circumvention of technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+You may convey verbatim copies of the Program's source code as you receive
+it, in any medium, provided that you conspicuously and appropriately publish
+on each copy an appropriate copyright notice; keep intact all notices stating
+that this License and any non-permissive terms added in accord with section
+7 apply to the code; keep intact all notices of the absence of any warranty;
+and give all recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you
+may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to produce
+it from the Program, in the form of source code under the terms of section
+4, provided that you also meet all of these conditions:
+
+a) The work must carry prominent notices stating that you modified it, and
+giving a relevant date.
+
+b) The work must carry prominent notices stating that it is released under
+this License and any conditions added under section 7. This requirement modifies
+the requirement in section 4 to "keep intact all notices".
+
+c) You must license the entire work, as a whole, under this License to anyone
+who comes into possession of a copy. This License will therefore apply, along
+with any applicable section 7 additional terms, to the whole of the work,
+and all its parts, regardless of how they are packaged. This License gives
+no permission to license the work in any other way, but it does not invalidate
+such permission if you have separately received it.
+
+d) If the work has interactive user interfaces, each must display Appropriate
+Legal Notices; however, if the Program has interactive interfaces that do
+not display Appropriate Legal Notices, your work need not make them do so.
+
+A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are
+not combined with it such as to form a larger program, in or on a volume of
+a storage or distribution medium, is called an "aggregate" if the compilation
+and its resulting copyright are not used to limit the access or legal rights
+of the compilation's users beyond what the individual works permit. Inclusion
+of a covered work in an aggregate does not cause this License to apply to
+the other parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms of sections
+4 and 5, provided that you also convey the machine-readable Corresponding
+Source under the terms of this License, in one of these ways:
+
+a) Convey the object code in, or embodied in, a physical product (including
+a physical distribution medium), accompanied by the Corresponding Source fixed
+on a durable physical medium customarily used for software interchange.
+
+b) Convey the object code in, or embodied in, a physical product (including
+a physical distribution medium), accompanied by a written offer, valid for
+at least three years and valid for as long as you offer spare parts or customer
+support for that product model, to give anyone who possesses the object code
+either (1) a copy of the Corresponding Source for all the software in the
+product that is covered by this License, on a durable physical medium customarily
+used for software interchange, for a price no more than your reasonable cost
+of physically performing this conveying of source, or (2) access to copy the
+Corresponding Source from a network server at no charge.
+
+c) Convey individual copies of the object code with a copy of the written
+offer to provide the Corresponding Source. This alternative is allowed only
+occasionally and noncommercially, and only if you received the object code
+with such an offer, in accord with subsection 6b.
+
+d) Convey the object code by offering access from a designated place (gratis
+or for a charge), and offer equivalent access to the Corresponding Source
+in the same way through the same place at no further charge. You need not
+require recipients to copy the Corresponding Source along with the object
+code. If the place to copy the object code is a network server, the Corresponding
+Source may be on a different server (operated by you or a third party) that
+supports equivalent copying facilities, provided you maintain clear directions
+next to the object code saying where to find the Corresponding Source. Regardless
+of what server hosts the Corresponding Source, you remain obligated to ensure
+that it is available for as long as needed to satisfy these requirements.
+
+e) Convey the object code using peer-to-peer transmission, provided you inform
+other peers where the object code and Corresponding Source of the work are
+being offered to the general public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from
+the Corresponding Source as a System Library, need not be included in conveying
+the object code work.
+
+A "User Product" is either (1) a "consumer product", which means any tangible
+personal property which is normally used for personal, family, or household
+purposes, or (2) anything designed or sold for incorporation into a dwelling.
+In determining whether a product is a consumer product, doubtful cases shall
+be resolved in favor of coverage. For a particular product received by a particular
+user, "normally used" refers to a typical or common use of that class of product,
+regardless of the status of the particular user or of the way in which the
+particular user actually uses, or expects or is expected to use, the product.
+A product is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent the
+only significant mode of use of the product.
+
+"Installation Information" for a User Product means any methods, procedures,
+authorization keys, or other information required to install and execute modified
+versions of a covered work in that User Product from a modified version of
+its Corresponding Source. The information must suffice to ensure that the
+continued functioning of the modified object code is in no case prevented
+or interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or specifically
+for use in, a User Product, and the conveying occurs as part of a transaction
+in which the right of possession and use of the User Product is transferred
+to the recipient in perpetuity or for a fixed term (regardless of how the
+transaction is characterized), the Corresponding Source conveyed under this
+section must be accompanied by the Installation Information. But this requirement
+does not apply if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has been installed
+in ROM).
+
+The requirement to provide Installation Information does not include a requirement
+to continue to provide support service, warranty, or updates for a work that
+has been modified or installed by the recipient, or for the User Product in
+which it has been modified or installed. Access to a network may be denied
+when the modification itself materially and adversely affects the operation
+of the network or violates the rules and protocols for communication across
+the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord
+with this section must be in a format that is publicly documented (and with
+an implementation available to the public in source code form), and must require
+no special password or key for unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+"Additional permissions" are terms that supplement the terms of this License
+by making exceptions from one or more of its conditions. Additional permissions
+that are applicable to the entire Program shall be treated as though they
+were included in this License, to the extent that they are valid under applicable
+law. If additional permissions apply only to part of the Program, that part
+may be used separately under those permissions, but the entire Program remains
+governed by this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any
+additional permissions from that copy, or from any part of it. (Additional
+permissions may be written to require their own removal in certain cases when
+you modify the work.) You may place additional permissions on material, added
+by you to a covered work, for which you have or can give appropriate copyright
+permission.
+
+Notwithstanding any other provision of this License, for material you add
+to a covered work, you may (if authorized by the copyright holders of that
+material) supplement the terms of this License with terms:
+
+a) Disclaiming warranty or limiting liability differently from the terms of
+sections 15 and 16 of this License; or
+
+b) Requiring preservation of specified reasonable legal notices or author
+attributions in that material or in the Appropriate Legal Notices displayed
+by works containing it; or
+
+c) Prohibiting misrepresentation of the origin of that material, or requiring
+that modified versions of such material be marked in reasonable ways as different
+from the original version; or
+
+d) Limiting the use for publicity purposes of names of licensors or authors
+of the material; or
+
+e) Declining to grant rights under trademark law for use of some trade names,
+trademarks, or service marks; or
+
+f) Requiring indemnification of licensors and authors of that material by
+anyone who conveys the material (or modified versions of it) with contractual
+assumptions of liability to the recipient, for any liability that these contractual
+assumptions directly impose on those licensors and authors.
+
+All other non-permissive additional terms are considered "further restrictions"
+within the meaning of section 10. If the Program as you received it, or any
+part of it, contains a notice stating that it is governed by this License
+along with a term that is a further restriction, you may remove that term.
+If a license document contains a further restriction but permits relicensing
+or conveying under this License, you may add to a covered work material governed
+by the terms of that license document, provided that the further restriction
+does not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place,
+in the relevant source files, a statement of the additional terms that apply
+to those files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form
+of a separately written license, or stated as exceptions; the above requirements
+apply either way.
+
+ 8. Termination.
+
+You may not propagate or modify a covered work except as expressly provided
+under this License. Any attempt otherwise to propagate or modify it is void,
+and will automatically terminate your rights under this License (including
+any patent licenses granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from
+a particular copyright holder is reinstated (a) provisionally, unless and
+until the copyright holder explicitly and finally terminates your license,
+and (b) permanently, if the copyright holder fails to notify you of the violation
+by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently
+if the copyright holder notifies you of the violation by some reasonable means,
+this is the first time you have received notice of violation of this License
+(for any work) from that copyright holder, and you cure the violation prior
+to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses
+of parties who have received copies or rights from you under this License.
+If your rights have been terminated and not permanently reinstated, you do
+not qualify to receive new licenses for the same material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run a copy
+of the Program. Ancillary propagation of a covered work occurring solely as
+a consequence of using peer-to-peer transmission to receive a copy likewise
+does not require acceptance. However, nothing other than this License grants
+you permission to propagate or modify any covered work. These actions infringe
+copyright if you do not accept this License. Therefore, by modifying or propagating
+a covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically receives
+a license from the original licensors, to run, modify and propagate that work,
+subject to this License. You are not responsible for enforcing compliance
+by third parties with this License.
+
+An "entity transaction" is a transaction transferring control of an organization,
+or substantially all assets of one, or subdividing an organization, or merging
+organizations. If propagation of a covered work results from an entity transaction,
+each party to that transaction who receives a copy of the work also receives
+whatever licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the Corresponding
+Source of the work from the predecessor in interest, if the predecessor has
+it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights
+granted or affirmed under this License. For example, you may not impose a
+license fee, royalty, or other charge for exercise of rights granted under
+this License, and you may not initiate litigation (including a cross-claim
+or counterclaim in a lawsuit) alleging that any patent claim is infringed
+by making, using, selling, offering for sale, or importing the Program or
+any portion of it.
+
+ 11. Patents.
+
+A "contributor" is a copyright holder who authorizes use under this License
+of the Program or a work on which the Program is based. The work thus licensed
+is called the contributor's "contributor version".
+
+A contributor's "essential patent claims" are all patent claims owned or controlled
+by the contributor, whether already acquired or hereafter acquired, that would
+be infringed by some manner, permitted by this License, of making, using,
+or selling its contributor version, but do not include claims that would be
+infringed only as a consequence of further modification of the contributor
+version. For purposes of this definition, "control" includes the right to
+grant patent sublicenses in a manner consistent with the requirements of this
+License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent
+license under the contributor's essential patent claims, to make, use, sell,
+offer for sale, import and otherwise run, modify and propagate the contents
+of its contributor version.
+
+In the following three paragraphs, a "patent license" is any express agreement
+or commitment, however denominated, not to enforce a patent (such as an express
+permission to practice a patent or covenant not to sue for patent infringement).
+To "grant" such a patent license to a party means to make such an agreement
+or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the
+Corresponding Source of the work is not available for anyone to copy, free
+of charge and under the terms of this License, through a publicly available
+network server or other readily accessible means, then you must either (1)
+cause the Corresponding Source to be so available, or (2) arrange to deprive
+yourself of the benefit of the patent license for this particular work, or
+(3) arrange, in a manner consistent with the requirements of this License,
+to extend the patent license to downstream recipients. "Knowingly relying"
+means you have actual knowledge that, but for the patent license, your conveying
+the covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that country
+that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement,
+you convey, or propagate by procuring conveyance of, a covered work, and grant
+a patent license to some of the parties receiving the covered work authorizing
+them to use, propagate, modify or convey a specific copy of the covered work,
+then the patent license you grant is automatically extended to all recipients
+of the covered work and works based on it.
+
+A patent license is "discriminatory" if it does not include within the scope
+of its coverage, prohibits the exercise of, or is conditioned on the non-exercise
+of one or more of the rights that are specifically granted under this License.
+You may not convey a covered work if you are a party to an arrangement with
+a third party that is in the business of distributing software, under which
+you make payment to the third party based on the extent of your activity of
+conveying the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory patent
+license (a) in connection with copies of the covered work conveyed by you
+(or copies made from those copies), or (b) primarily for and in connection
+with specific products or compilations that contain the covered work, unless
+you entered into that arrangement, or that patent license was granted, prior
+to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied
+license or other defenses to infringement that may otherwise be available
+to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+If conditions are imposed on you (whether by court order, agreement or otherwise)
+that contradict the conditions of this License, they do not excuse you from
+the conditions of this License. If you cannot convey a covered work so as
+to satisfy simultaneously your obligations under this License and any other
+pertinent obligations, then as a consequence you may not convey it at all.
+For example, if you agree to terms that obligate you to collect a royalty
+for further conveying from those to whom you convey the Program, the only
+way you could satisfy both those terms and this License would be to refrain
+entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+Notwithstanding any other provision of this License, you have permission to
+link or combine any covered work with a work licensed under version 3 of the
+GNU Affero General Public License into a single combined work, and to convey
+the resulting work. The terms of this License will continue to apply to the
+part which is the covered work, but the special requirements of the GNU Affero
+General Public License, section 13, concerning interaction through a network
+will apply to the combination as such.
+
+ 14. Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions of the
+GNU General Public License from time to time. Such new versions will be similar
+in spirit to the present version, but may differ in detail to address new
+problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies
+that a certain numbered version of the GNU General Public License "or any
+later version" applies to it, you have the option of following the terms and
+conditions either of that numbered version or of any later version published
+by the Free Software Foundation. If the Program does not specify a version
+number of the GNU General Public License, you may choose any version ever
+published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of
+the GNU General Public License can be used, that proxy's public statement
+of acceptance of a version permanently authorizes you to choose that version
+for the Program.
+
+Later license versions may give you additional or different permissions. However,
+no additional obligations are imposed on any author or copyright holder as
+a result of your choosing to follow a later version.
+
+ 15. Disclaimer of Warranty.
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM
+PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+ 16. Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM
+AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO
+USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
+INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
+PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
+PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided above cannot
+be given local legal effect according to their terms, reviewing courts shall
+apply local law that most closely approximates an absolute waiver of all civil
+liability in connection with the Program, unless a warranty or assumption
+of liability accompanies a copy of the Program in return for a fee. END OF
+TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach
+them to the start of each source file to most effectively state the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+<one line to give the program's name and a brief idea of what it does.>
+
+Copyright (C) <year> <name of author>
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation, either version 3 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program. If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short notice like
+this when it starts in an interactive mode:
+
+<program> Copyright (C) <year> <name of author>
+
+This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+
+This is free software, and you are welcome to redistribute it under certain
+conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands might
+be different; for a GUI interface, you would use an "about box".
+
+You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary. For
+more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
+
+The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General Public
+License instead of this License. But first, please read <https://www.gnu.org/
+licenses /why-not-lgpl.html>.
--- /dev/null
+GNU LIBRARY GENERAL PUBLIC LICENSE
+
+Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc.
+
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is numbered 2 because
+it goes with version 2 of the ordinary GPL.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public Licenses are intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.
+
+This license, the Library General Public License, applies to some specially
+designated Free Software Foundation software, and to any other libraries whose
+authors decide to use it. You can use it for your libraries, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you
+wish), that you receive source code or can get it if you want it, that you
+can change the software or use pieces of it in new free programs; and that
+you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of
+the library, or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for
+a fee, you must give the recipients all the rights that we gave you. You must
+make sure that they, too, receive or can get the source code. If you link
+a program with the library, you must provide complete object files to the
+recipients so that they can relink them with the library, after making changes
+to the library and recompiling it. And you must show them these terms so they
+know their rights.
+
+Our method of protecting your rights has two steps: (1) copyright the library,
+and (2) offer you this license which gives you legal permission to copy, distribute
+and/or modify the library.
+
+Also, for each distributor's protection, we want to make certain that everyone
+understands that there is no warranty for this free library. If the library
+is modified by someone else and passed on, we want its recipients to know
+that what they have is not the original version, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that companies distributing free software will individually
+obtain patent licenses, thus in effect transforming the program into proprietary
+software. To prevent this, we have made it clear that any patent must be licensed
+for everyone's free use or not licensed at all.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License, which was designed for utility programs. This license,
+the GNU Library General Public License, applies to certain designated libraries.
+This license is quite different from the ordinary one; be sure to read it
+in full, and don't assume that anything in it is the same as in the ordinary
+license.
+
+The reason we have a separate public license for some libraries is that they
+blur the distinction we usually make between modifying or adding to a program
+and simply using it. Linking a program with a library, without changing the
+library, is in some sense simply using the library, and is analogous to running
+a utility program or application program. However, in a textual and legal
+sense, the linked executable is a combined work, a derivative of the original
+library, and the ordinary General Public License treats it as such.
+
+Because of this blurred distinction, using the ordinary General Public License
+for libraries did not effectively promote software sharing, because most developers
+did not use the libraries. We concluded that weaker conditions might promote
+sharing better.
+
+However, unrestricted linking of non-free programs would deprive the users
+of those programs of all benefit from the free status of the libraries themselves.
+This Library General Public License is intended to permit developers of non-free
+programs to use free libraries, while preserving your freedom as a user of
+such programs to change the free libraries that are incorporated in them.
+(We have not seen how to achieve this as regards changes in header files,
+but we have achieved it as regards changes in the actual functions of the
+Library.) The hope is that this will lead to faster development of free libraries.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code derived
+from the library, while the latter only works together with the library.
+
+Note that it is possible for a library to be covered by the ordinary General
+Public License rather than by this special one.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library which contains a
+notice placed by the copyright holder or other authorized party saying it
+may be distributed under the terms of this Library General Public License
+(also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared
+so as to be conveniently linked with application programs (which use some
+of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means either
+the Library or any derivative work under copyright law: that is to say, a
+work containing the Library or a portion of it, either verbatim or with modifications
+and/or translated straightforwardly into another language. (Hereinafter, translation
+is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications
+to it. For a library, complete source code means all the source code for all
+modules it contains, plus any associated interface definition files, plus
+the scripts used to control compilation and installation of the library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is covered
+only if its contents constitute a work based on the Library (independent of
+the use of the Library in a tool for writing it). Whether that is true depends
+on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and disclaimer
+of warranty; keep intact all the notices that refer to this License and to
+the absence of any warranty; and distribute a copy of this License along with
+the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it,
+thus forming a work based on the Library, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all
+of these conditions:
+
+ a) The modified work must itself be a software library.
+
+b) You must cause the files modified to carry prominent notices stating that
+you changed the files and the date of any change.
+
+c) You must cause the whole of the work to be licensed at no charge to all
+third parties under the terms of this License.
+
+d) If a facility in the modified Library refers to a function or a table of
+data to be supplied by an application program that uses the facility, other
+than as an argument passed when the facility is invoked, then you must make
+a good faith effort to ensure that, in the event an application does not supply
+such function or table, the facility still operates, and performs whatever
+part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose
+that is entirely well-defined independent of the application. Therefore, Subsection
+2d requires that any application-supplied function or table used by this function
+must be optional: if the application does not supply it, the square root function
+must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Library, the distribution of the whole must be
+on the terms of this License, whose permissions for other licensees extend
+to the entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise
+the right to control the distribution of derivative or collective works based
+on the Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License
+instead of this License to a given copy of the Library. To do this, you must
+alter all the notices that refer to this License, so that they refer to the
+ordinary GNU General Public License, version 2, instead of to this License.
+(If a newer version than version 2 of the ordinary GNU General Public License
+has appeared, then you can specify that version instead if you wish.) Do not
+make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy,
+so the ordinary GNU General Public License applies to all subsequent copies
+and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of
+it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you accompany it with the complete corresponding
+machine-readable source code, which must be distributed under the terms of
+Sections 1 and 2 above on a medium customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a designated
+place, then offering equivalent access to copy the source code from the same
+place satisfies the requirement to distribute the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but
+is designed to work with the Library by being compiled or linked with it,
+is called a "work that uses the Library". Such a work, in isolation, is not
+a derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for distribution
+of such executables.
+
+When a "work that uses the Library" uses material from a header file that
+is part of the Library, the object code for the work may be a derivative work
+of the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not precisely
+defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts
+and accessors, and small macros and small inline functions (ten lines or less
+in length), then the use of the object file is unrestricted, regardless of
+whether it is legally a derivative work. (Executables containing this object
+code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute
+the object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are linked
+directly with the Library itself.
+
+6. As an exception to the Sections above, you may also compile or link a "work
+that uses the Library" with the Library to produce a work containing portions
+of the Library, and distribute that work under terms of your choice, provided
+that the terms permit modification of the work for the customer's own use
+and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library
+is used in it and that the Library and its use are covered by this License.
+You must supply a copy of this License. If the work during execution displays
+copyright notices, you must include the copyright notice for the Library among
+them, as well as a reference directing the user to the copy of this License.
+Also, you must do one of these things:
+
+a) Accompany the work with the complete corresponding machine-readable source
+code for the Library including whatever changes were used in the work (which
+must be distributed under Sections 1 and 2 above); and, if the work is an
+executable linked with the Library, with the complete machine-readable "work
+that uses the Library", as object code and/or source code, so that the user
+can modify the Library and then relink to produce a modified executable containing
+the modified Library. (It is understood that the user who changes the contents
+of definitions files in the Library will not necessarily be able to recompile
+the application to use the modified definitions.)
+
+b) Accompany the work with a written offer, valid for at least three years,
+to give the same user the materials specified in Subsection 6a, above, for
+a charge no more than the cost of performing this distribution.
+
+c) If distribution of the work is made by offering access to copy from a designated
+place, offer equivalent access to copy the above specified materials from
+the same place.
+
+d) Verify that the user has already received a copy of these materials or
+that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must
+include any data and utility programs needed for reproducing the executable
+from it. However, as a special exception, the source code distributed need
+not include anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the operating
+system on which the executable runs, unless that component itself accompanies
+the executable.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating system.
+Such a contradiction means you cannot use both them and the Library together
+in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side
+in a single library together with other library facilities not covered by
+this License, and distribute such a combined library, provided that the separate
+distribution of the work based on the Library and of the other library facilities
+is otherwise permitted, and provided that you do these two things:
+
+a) Accompany the combined library with a copy of the same work based on the
+Library, uncombined with any other library facilities. This must be distributed
+under the terms of the Sections above.
+
+b) Give prominent notice with the combined library of the fact that part of
+it is a work based on the Library, and explaining where to find the accompanying
+uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library
+except as expressly provided under this License. Any attempt otherwise to
+copy, modify, sublicense, link with, or distribute the Library is void, and
+will automatically terminate your rights under this License. However, parties
+who have received copies, or rights, from you under this License will not
+have their licenses terminated so long as such parties remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed
+it. However, nothing else grants you permission to modify or distribute the
+Library or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the Library
+(or any work based on the Library), you indicate your acceptance of this License
+to do so, and all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library),
+the recipient automatically receives a license from the original licensor
+to copy, distribute, link with or modify the Library subject to these terms
+and conditions. You may not impose any further restrictions on the recipients'
+exercise of the rights granted herein. You are not responsible for enforcing
+compliance by third parties to this License.
+
+11. If, as a consequence of a court judgment or allegation of patent infringement
+or for any other reason (not limited to patent issues), conditions are imposed
+on you (whether by court order, agreement or otherwise) that contradict the
+conditions of this License, they do not excuse you from the conditions of
+this License. If you cannot distribute so as to satisfy simultaneously your
+obligations under this License and any other pertinent obligations, then as
+a consequence you may not distribute the Library at all. For example, if a
+patent license would not permit royalty-free redistribution of the Library
+by all those who receive copies directly or indirectly through you, then the
+only way you could satisfy both it and this License would be to refrain entirely
+from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents
+or other property right claims or to contest validity of any such claims;
+this section has the sole purpose of protecting the integrity of the free
+software distribution system which is implemented by public license practices.
+Many people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose
+that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain
+countries either by patents or by copyrighted interfaces, the original copyright
+holder who places the Library under this License may add an explicit geographical
+distribution limitation excluding those countries, so that distribution is
+permitted only in or among countries not thus excluded. In such case, this
+License incorporates the limitation as if written in the body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of
+the Library General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to address
+new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library specifies
+a version number of this License which applies to it and "any later version",
+you have the option of following the terms and conditions either of that version
+or of any later version published by the Free Software Foundation. If the
+Library does not specify a license version number, you may choose any version
+ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs
+whose distribution conditions are incompatible with these, write to the author
+to ask for permission. For software which is copyrighted by the Free Software
+Foundation, write to the Free Software Foundation; we sometimes make exceptions
+for this. Our decision will be guided by the two goals of preserving the free
+status of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
+"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
+OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
+THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
+OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
+OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
+OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+
+If you develop a new library, and you want it to be of the greatest possible
+use to the public, we recommend making it free software that everyone can
+redistribute and change. You can do so by permitting redistribution under
+these terms (or, alternatively, under the terms of the ordinary General Public
+License).
+
+To apply these terms, attach the following notices to the library. It is safest
+to attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the "copyright"
+line and a pointer to where the full notice is found.
+
+one line to give the library's name and an idea of what it does.
+
+Copyright (C) year name of author
+
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Library General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
+details.
+
+You should have received a copy of the GNU Library General Public License
+along with this library; if not, write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the library, if necessary. Here
+is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+
+the library `Frob' (a library for tweaking knobs) written
+
+by James Random Hacker.
+
+signature of Ty Coon, 1 April 1990
+
+Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+GNU LIBRARY GENERAL PUBLIC LICENSE
+
+Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc.
+
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is numbered 2 because
+it goes with version 2 of the ordinary GPL.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public Licenses are intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.
+
+This license, the Library General Public License, applies to some specially
+designated Free Software Foundation software, and to any other libraries whose
+authors decide to use it. You can use it for your libraries, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you
+wish), that you receive source code or can get it if you want it, that you
+can change the software or use pieces of it in new free programs; and that
+you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of
+the library, or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for
+a fee, you must give the recipients all the rights that we gave you. You must
+make sure that they, too, receive or can get the source code. If you link
+a program with the library, you must provide complete object files to the
+recipients so that they can relink them with the library, after making changes
+to the library and recompiling it. And you must show them these terms so they
+know their rights.
+
+Our method of protecting your rights has two steps: (1) copyright the library,
+and (2) offer you this license which gives you legal permission to copy, distribute
+and/or modify the library.
+
+Also, for each distributor's protection, we want to make certain that everyone
+understands that there is no warranty for this free library. If the library
+is modified by someone else and passed on, we want its recipients to know
+that what they have is not the original version, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that companies distributing free software will individually
+obtain patent licenses, thus in effect transforming the program into proprietary
+software. To prevent this, we have made it clear that any patent must be licensed
+for everyone's free use or not licensed at all.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License, which was designed for utility programs. This license,
+the GNU Library General Public License, applies to certain designated libraries.
+This license is quite different from the ordinary one; be sure to read it
+in full, and don't assume that anything in it is the same as in the ordinary
+license.
+
+The reason we have a separate public license for some libraries is that they
+blur the distinction we usually make between modifying or adding to a program
+and simply using it. Linking a program with a library, without changing the
+library, is in some sense simply using the library, and is analogous to running
+a utility program or application program. However, in a textual and legal
+sense, the linked executable is a combined work, a derivative of the original
+library, and the ordinary General Public License treats it as such.
+
+Because of this blurred distinction, using the ordinary General Public License
+for libraries did not effectively promote software sharing, because most developers
+did not use the libraries. We concluded that weaker conditions might promote
+sharing better.
+
+However, unrestricted linking of non-free programs would deprive the users
+of those programs of all benefit from the free status of the libraries themselves.
+This Library General Public License is intended to permit developers of non-free
+programs to use free libraries, while preserving your freedom as a user of
+such programs to change the free libraries that are incorporated in them.
+(We have not seen how to achieve this as regards changes in header files,
+but we have achieved it as regards changes in the actual functions of the
+Library.) The hope is that this will lead to faster development of free libraries.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code derived
+from the library, while the latter only works together with the library.
+
+Note that it is possible for a library to be covered by the ordinary General
+Public License rather than by this special one.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library which contains a
+notice placed by the copyright holder or other authorized party saying it
+may be distributed under the terms of this Library General Public License
+(also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared
+so as to be conveniently linked with application programs (which use some
+of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means either
+the Library or any derivative work under copyright law: that is to say, a
+work containing the Library or a portion of it, either verbatim or with modifications
+and/or translated straightforwardly into another language. (Hereinafter, translation
+is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications
+to it. For a library, complete source code means all the source code for all
+modules it contains, plus any associated interface definition files, plus
+the scripts used to control compilation and installation of the library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is covered
+only if its contents constitute a work based on the Library (independent of
+the use of the Library in a tool for writing it). Whether that is true depends
+on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and disclaimer
+of warranty; keep intact all the notices that refer to this License and to
+the absence of any warranty; and distribute a copy of this License along with
+the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it,
+thus forming a work based on the Library, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all
+of these conditions:
+
+ a) The modified work must itself be a software library.
+
+b) You must cause the files modified to carry prominent notices stating that
+you changed the files and the date of any change.
+
+c) You must cause the whole of the work to be licensed at no charge to all
+third parties under the terms of this License.
+
+d) If a facility in the modified Library refers to a function or a table of
+data to be supplied by an application program that uses the facility, other
+than as an argument passed when the facility is invoked, then you must make
+a good faith effort to ensure that, in the event an application does not supply
+such function or table, the facility still operates, and performs whatever
+part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose
+that is entirely well-defined independent of the application. Therefore, Subsection
+2d requires that any application-supplied function or table used by this function
+must be optional: if the application does not supply it, the square root function
+must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Library, the distribution of the whole must be
+on the terms of this License, whose permissions for other licensees extend
+to the entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise
+the right to control the distribution of derivative or collective works based
+on the Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License
+instead of this License to a given copy of the Library. To do this, you must
+alter all the notices that refer to this License, so that they refer to the
+ordinary GNU General Public License, version 2, instead of to this License.
+(If a newer version than version 2 of the ordinary GNU General Public License
+has appeared, then you can specify that version instead if you wish.) Do not
+make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy,
+so the ordinary GNU General Public License applies to all subsequent copies
+and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of
+it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you accompany it with the complete corresponding
+machine-readable source code, which must be distributed under the terms of
+Sections 1 and 2 above on a medium customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a designated
+place, then offering equivalent access to copy the source code from the same
+place satisfies the requirement to distribute the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but
+is designed to work with the Library by being compiled or linked with it,
+is called a "work that uses the Library". Such a work, in isolation, is not
+a derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for distribution
+of such executables.
+
+When a "work that uses the Library" uses material from a header file that
+is part of the Library, the object code for the work may be a derivative work
+of the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not precisely
+defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts
+and accessors, and small macros and small inline functions (ten lines or less
+in length), then the use of the object file is unrestricted, regardless of
+whether it is legally a derivative work. (Executables containing this object
+code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute
+the object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are linked
+directly with the Library itself.
+
+6. As an exception to the Sections above, you may also compile or link a "work
+that uses the Library" with the Library to produce a work containing portions
+of the Library, and distribute that work under terms of your choice, provided
+that the terms permit modification of the work for the customer's own use
+and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library
+is used in it and that the Library and its use are covered by this License.
+You must supply a copy of this License. If the work during execution displays
+copyright notices, you must include the copyright notice for the Library among
+them, as well as a reference directing the user to the copy of this License.
+Also, you must do one of these things:
+
+a) Accompany the work with the complete corresponding machine-readable source
+code for the Library including whatever changes were used in the work (which
+must be distributed under Sections 1 and 2 above); and, if the work is an
+executable linked with the Library, with the complete machine-readable "work
+that uses the Library", as object code and/or source code, so that the user
+can modify the Library and then relink to produce a modified executable containing
+the modified Library. (It is understood that the user who changes the contents
+of definitions files in the Library will not necessarily be able to recompile
+the application to use the modified definitions.)
+
+b) Accompany the work with a written offer, valid for at least three years,
+to give the same user the materials specified in Subsection 6a, above, for
+a charge no more than the cost of performing this distribution.
+
+c) If distribution of the work is made by offering access to copy from a designated
+place, offer equivalent access to copy the above specified materials from
+the same place.
+
+d) Verify that the user has already received a copy of these materials or
+that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must
+include any data and utility programs needed for reproducing the executable
+from it. However, as a special exception, the source code distributed need
+not include anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the operating
+system on which the executable runs, unless that component itself accompanies
+the executable.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating system.
+Such a contradiction means you cannot use both them and the Library together
+in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side
+in a single library together with other library facilities not covered by
+this License, and distribute such a combined library, provided that the separate
+distribution of the work based on the Library and of the other library facilities
+is otherwise permitted, and provided that you do these two things:
+
+a) Accompany the combined library with a copy of the same work based on the
+Library, uncombined with any other library facilities. This must be distributed
+under the terms of the Sections above.
+
+b) Give prominent notice with the combined library of the fact that part of
+it is a work based on the Library, and explaining where to find the accompanying
+uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library
+except as expressly provided under this License. Any attempt otherwise to
+copy, modify, sublicense, link with, or distribute the Library is void, and
+will automatically terminate your rights under this License. However, parties
+who have received copies, or rights, from you under this License will not
+have their licenses terminated so long as such parties remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed
+it. However, nothing else grants you permission to modify or distribute the
+Library or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the Library
+(or any work based on the Library), you indicate your acceptance of this License
+to do so, and all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library),
+the recipient automatically receives a license from the original licensor
+to copy, distribute, link with or modify the Library subject to these terms
+and conditions. You may not impose any further restrictions on the recipients'
+exercise of the rights granted herein. You are not responsible for enforcing
+compliance by third parties to this License.
+
+11. If, as a consequence of a court judgment or allegation of patent infringement
+or for any other reason (not limited to patent issues), conditions are imposed
+on you (whether by court order, agreement or otherwise) that contradict the
+conditions of this License, they do not excuse you from the conditions of
+this License. If you cannot distribute so as to satisfy simultaneously your
+obligations under this License and any other pertinent obligations, then as
+a consequence you may not distribute the Library at all. For example, if a
+patent license would not permit royalty-free redistribution of the Library
+by all those who receive copies directly or indirectly through you, then the
+only way you could satisfy both it and this License would be to refrain entirely
+from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents
+or other property right claims or to contest validity of any such claims;
+this section has the sole purpose of protecting the integrity of the free
+software distribution system which is implemented by public license practices.
+Many people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose
+that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain
+countries either by patents or by copyrighted interfaces, the original copyright
+holder who places the Library under this License may add an explicit geographical
+distribution limitation excluding those countries, so that distribution is
+permitted only in or among countries not thus excluded. In such case, this
+License incorporates the limitation as if written in the body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of
+the Library General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to address
+new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library specifies
+a version number of this License which applies to it and "any later version",
+you have the option of following the terms and conditions either of that version
+or of any later version published by the Free Software Foundation. If the
+Library does not specify a license version number, you may choose any version
+ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs
+whose distribution conditions are incompatible with these, write to the author
+to ask for permission. For software which is copyrighted by the Free Software
+Foundation, write to the Free Software Foundation; we sometimes make exceptions
+for this. Our decision will be guided by the two goals of preserving the free
+status of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
+"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
+OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
+THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
+OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
+OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
+OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+
+If you develop a new library, and you want it to be of the greatest possible
+use to the public, we recommend making it free software that everyone can
+redistribute and change. You can do so by permitting redistribution under
+these terms (or, alternatively, under the terms of the ordinary General Public
+License).
+
+To apply these terms, attach the following notices to the library. It is safest
+to attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the "copyright"
+line and a pointer to where the full notice is found.
+
+one line to give the library's name and an idea of what it does.
+
+Copyright (C) year name of author
+
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Library General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
+details.
+
+You should have received a copy of the GNU Library General Public License
+along with this library; if not, write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the library, if necessary. Here
+is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+
+the library `Frob' (a library for tweaking knobs) written
+
+by James Random Hacker.
+
+signature of Ty Coon, 1 April 1990
+
+Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+GNU LESSER GENERAL PUBLIC LICENSE
+
+Version 2.1, February 1999
+
+Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts as the
+successor of the GNU Library Public License, version 2, hence the version
+number 2.1.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public Licenses are intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.
+
+This license, the Lesser General Public License, applies to some specially
+designated software packages--typically libraries--of the Free Software Foundation
+and other authors who decide to use it. You can use it too, but we suggest
+you first think carefully about whether this license or the ordinary General
+Public License is the better strategy to use in any particular case, based
+on the explanations below.
+
+When we speak of free software, we are referring to freedom of use, not price.
+Our General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you
+wish); that you receive source code or can get it if you want it; that you
+can change the software and use pieces of it in new free programs; and that
+you are informed that you can do these things.
+
+To protect your rights, we need to make restrictions that forbid distributors
+to deny you these rights or to ask you to surrender these rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of
+the library or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for
+a fee, you must give the recipients all the rights that we gave you. You must
+make sure that they, too, receive or can get the source code. If you link
+other code with the library, you must provide complete object files to the
+recipients, so that they can relink them with the library after making changes
+to the library and recompiling it. And you must show them these terms so they
+know their rights.
+
+We protect your rights with a two-step method: (1) we copyright the library,
+and (2) we offer you this license, which gives you legal permission to copy,
+distribute and/or modify the library.
+
+To protect each distributor, we want to make it very clear that there is no
+warranty for the free library. Also, if the library is modified by someone
+else and passed on, the recipients should know that what they have is not
+the original version, so that the original author's reputation will not be
+affected by problems that might be introduced by others.
+
+Finally, software patents pose a constant threat to the existence of any free
+program. We wish to make sure that a company cannot effectively restrict the
+users of a free program by obtaining a restrictive license from a patent holder.
+Therefore, we insist that any patent license obtained for a version of the
+library must be consistent with the full freedom of use specified in this
+license.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License. This license, the GNU Lesser General Public License,
+applies to certain designated libraries, and is quite different from the ordinary
+General Public License. We use this license for certain libraries in order
+to permit linking those libraries into non-free programs.
+
+When a program is linked with a library, whether statically or using a shared
+library, the combination of the two is legally speaking a combined work, a
+derivative of the original library. The ordinary General Public License therefore
+permits such linking only if the entire combination fits its criteria of freedom.
+The Lesser General Public License permits more lax criteria for linking other
+code with the library.
+
+We call this license the "Lesser" General Public License because it does Less
+to protect the user's freedom than the ordinary General Public License. It
+also provides other free software developers Less of an advantage over competing
+non-free programs. These disadvantages are the reason we use the ordinary
+General Public License for many libraries. However, the Lesser license provides
+advantages in certain special circumstances.
+
+For example, on rare occasions, there may be a special need to encourage the
+widest possible use of a certain library, so that it becomes a de-facto standard.
+To achieve this, non-free programs must be allowed to use the library. A more
+frequent case is that a free library does the same job as widely used non-free
+libraries. In this case, there is little to gain by limiting the free library
+to free software only, so we use the Lesser General Public License.
+
+In other cases, permission to use a particular library in non-free programs
+enables a greater number of people to use a large body of free software. For
+example, permission to use the GNU C Library in non-free programs enables
+many more people to use the whole GNU operating system, as well as its variant,
+the GNU/Linux operating system.
+
+Although the Lesser General Public License is Less protective of the users'
+freedom, it does ensure that the user of a program that is linked with the
+Library has the freedom and the wherewithal to run that program using a modified
+version of the Library.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code derived
+from the library, whereas the latter must be combined with the library in
+order to run.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library or other program
+which contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Lesser General
+Public License (also called "this License"). Each licensee is addressed as
+"you".
+
+A "library" means a collection of software functions and/or data prepared
+so as to be conveniently linked with application programs (which use some
+of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means either
+the Library or any derivative work under copyright law: that is to say, a
+work containing the Library or a portion of it, either verbatim or with modifications
+and/or translated straightforwardly into another language. (Hereinafter, translation
+is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications
+to it. For a library, complete source code means all the source code for all
+modules it contains, plus any associated interface definition files, plus
+the scripts used to control compilation and installation of the library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is covered
+only if its contents constitute a work based on the Library (independent of
+the use of the Library in a tool for writing it). Whether that is true depends
+on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and disclaimer
+of warranty; keep intact all the notices that refer to this License and to
+the absence of any warranty; and distribute a copy of this License along with
+the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it,
+thus forming a work based on the Library, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all
+of these conditions:
+
+ a) The modified work must itself be a software library.
+
+b) You must cause the files modified to carry prominent notices stating that
+you changed the files and the date of any change.
+
+c) You must cause the whole of the work to be licensed at no charge to all
+third parties under the terms of this License.
+
+d) If a facility in the modified Library refers to a function or a table of
+data to be supplied by an application program that uses the facility, other
+than as an argument passed when the facility is invoked, then you must make
+a good faith effort to ensure that, in the event an application does not supply
+such function or table, the facility still operates, and performs whatever
+part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose
+that is entirely well-defined independent of the application. Therefore, Subsection
+2d requires that any application-supplied function or table used by this function
+must be optional: if the application does not supply it, the square root function
+must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Library, the distribution of the whole must be
+on the terms of this License, whose permissions for other licensees extend
+to the entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise
+the right to control the distribution of derivative or collective works based
+on the Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License
+instead of this License to a given copy of the Library. To do this, you must
+alter all the notices that refer to this License, so that they refer to the
+ordinary GNU General Public License, version 2, instead of to this License.
+(If a newer version than version 2 of the ordinary GNU General Public License
+has appeared, then you can specify that version instead if you wish.) Do not
+make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy,
+so the ordinary GNU General Public License applies to all subsequent copies
+and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of
+it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you accompany it with the complete corresponding
+machine-readable source code, which must be distributed under the terms of
+Sections 1 and 2 above on a medium customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a designated
+place, then offering equivalent access to copy the source code from the same
+place satisfies the requirement to distribute the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but
+is designed to work with the Library by being compiled or linked with it,
+is called a "work that uses the Library". Such a work, in isolation, is not
+a derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for distribution
+of such executables.
+
+When a "work that uses the Library" uses material from a header file that
+is part of the Library, the object code for the work may be a derivative work
+of the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not precisely
+defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts
+and accessors, and small macros and small inline functions (ten lines or less
+in length), then the use of the object file is unrestricted, regardless of
+whether it is legally a derivative work. (Executables containing this object
+code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute
+the object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are linked
+directly with the Library itself.
+
+6. As an exception to the Sections above, you may also combine or link a "work
+that uses the Library" with the Library to produce a work containing portions
+of the Library, and distribute that work under terms of your choice, provided
+that the terms permit modification of the work for the customer's own use
+and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library
+is used in it and that the Library and its use are covered by this License.
+You must supply a copy of this License. If the work during execution displays
+copyright notices, you must include the copyright notice for the Library among
+them, as well as a reference directing the user to the copy of this License.
+Also, you must do one of these things:
+
+a) Accompany the work with the complete corresponding machine-readable source
+code for the Library including whatever changes were used in the work (which
+must be distributed under Sections 1 and 2 above); and, if the work is an
+executable linked with the Library, with the complete machine-readable "work
+that uses the Library", as object code and/or source code, so that the user
+can modify the Library and then relink to produce a modified executable containing
+the modified Library. (It is understood that the user who changes the contents
+of definitions files in the Library will not necessarily be able to recompile
+the application to use the modified definitions.)
+
+b) Use a suitable shared library mechanism for linking with the Library. A
+suitable mechanism is one that (1) uses at run time a copy of the library
+already present on the user's computer system, rather than copying library
+functions into the executable, and (2) will operate properly with a modified
+version of the library, if the user installs one, as long as the modified
+version is interface-compatible with the version that the work was made with.
+
+c) Accompany the work with a written offer, valid for at least three years,
+to give the same user the materials specified in Subsection 6a, above, for
+a charge no more than the cost of performing this distribution.
+
+d) If distribution of the work is made by offering access to copy from a designated
+place, offer equivalent access to copy the above specified materials from
+the same place.
+
+e) Verify that the user has already received a copy of these materials or
+that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must
+include any data and utility programs needed for reproducing the executable
+from it. However, as a special exception, the materials to be distributed
+need not include anything that is normally distributed (in either source or
+binary form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component itself
+accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating system.
+Such a contradiction means you cannot use both them and the Library together
+in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side
+in a single library together with other library facilities not covered by
+this License, and distribute such a combined library, provided that the separate
+distribution of the work based on the Library and of the other library facilities
+is otherwise permitted, and provided that you do these two things:
+
+a) Accompany the combined library with a copy of the same work based on the
+Library, uncombined with any other library facilities. This must be distributed
+under the terms of the Sections above.
+
+b) Give prominent notice with the combined library of the fact that part of
+it is a work based on the Library, and explaining where to find the accompanying
+uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library
+except as expressly provided under this License. Any attempt otherwise to
+copy, modify, sublicense, link with, or distribute the Library is void, and
+will automatically terminate your rights under this License. However, parties
+who have received copies, or rights, from you under this License will not
+have their licenses terminated so long as such parties remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed
+it. However, nothing else grants you permission to modify or distribute the
+Library or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the Library
+(or any work based on the Library), you indicate your acceptance of this License
+to do so, and all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library),
+the recipient automatically receives a license from the original licensor
+to copy, distribute, link with or modify the Library subject to these terms
+and conditions. You may not impose any further restrictions on the recipients'
+exercise of the rights granted herein. You are not responsible for enforcing
+compliance by third parties with this License.
+
+11. If, as a consequence of a court judgment or allegation of patent infringement
+or for any other reason (not limited to patent issues), conditions are imposed
+on you (whether by court order, agreement or otherwise) that contradict the
+conditions of this License, they do not excuse you from the conditions of
+this License. If you cannot distribute so as to satisfy simultaneously your
+obligations under this License and any other pertinent obligations, then as
+a consequence you may not distribute the Library at all. For example, if a
+patent license would not permit royalty-free redistribution of the Library
+by all those who receive copies directly or indirectly through you, then the
+only way you could satisfy both it and this License would be to refrain entirely
+from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents
+or other property right claims or to contest validity of any such claims;
+this section has the sole purpose of protecting the integrity of the free
+software distribution system which is implemented by public license practices.
+Many people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose
+that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain
+countries either by patents or by copyrighted interfaces, the original copyright
+holder who places the Library under this License may add an explicit geographical
+distribution limitation excluding those countries, so that distribution is
+permitted only in or among countries not thus excluded. In such case, this
+License incorporates the limitation as if written in the body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of
+the Lesser General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to address
+new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library specifies
+a version number of this License which applies to it and "any later version",
+you have the option of following the terms and conditions either of that version
+or of any later version published by the Free Software Foundation. If the
+Library does not specify a license version number, you may choose any version
+ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs
+whose distribution conditions are incompatible with these, write to the author
+to ask for permission. For software which is copyrighted by the Free Software
+Foundation, write to the Free Software Foundation; we sometimes make exceptions
+for this. Our decision will be guided by the two goals of preserving the free
+status of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
+"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
+OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
+THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
+OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
+OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
+OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+
+If you develop a new library, and you want it to be of the greatest possible
+use to the public, we recommend making it free software that everyone can
+redistribute and change. You can do so by permitting redistribution under
+these terms (or, alternatively, under the terms of the ordinary General Public
+License).
+
+To apply these terms, attach the following notices to the library. It is safest
+to attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the "copyright"
+line and a pointer to where the full notice is found.
+
+< one line to give the library's name and an idea of what it does. >
+
+Copyright (C) < year > < name of author >
+
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free
+Software Foundation; either version 2.1 of the License, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this library; if not, write to the Free Software Foundation, Inc., 51
+Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information
+on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the library, if necessary. Here
+is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+
+the library `Frob' (a library for tweaking knobs) written
+
+by James Random Hacker.
+
+< signature of Ty Coon > , 1 April 1990
+
+Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+GNU LESSER GENERAL PUBLIC LICENSE
+
+Version 2.1, February 1999
+
+Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts as the
+successor of the GNU Library Public License, version 2, hence the version
+number 2.1.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public Licenses are intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.
+
+This license, the Lesser General Public License, applies to some specially
+designated software packages--typically libraries--of the Free Software Foundation
+and other authors who decide to use it. You can use it too, but we suggest
+you first think carefully about whether this license or the ordinary General
+Public License is the better strategy to use in any particular case, based
+on the explanations below.
+
+When we speak of free software, we are referring to freedom of use, not price.
+Our General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you
+wish); that you receive source code or can get it if you want it; that you
+can change the software and use pieces of it in new free programs; and that
+you are informed that you can do these things.
+
+To protect your rights, we need to make restrictions that forbid distributors
+to deny you these rights or to ask you to surrender these rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of
+the library or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for
+a fee, you must give the recipients all the rights that we gave you. You must
+make sure that they, too, receive or can get the source code. If you link
+other code with the library, you must provide complete object files to the
+recipients, so that they can relink them with the library after making changes
+to the library and recompiling it. And you must show them these terms so they
+know their rights.
+
+We protect your rights with a two-step method: (1) we copyright the library,
+and (2) we offer you this license, which gives you legal permission to copy,
+distribute and/or modify the library.
+
+To protect each distributor, we want to make it very clear that there is no
+warranty for the free library. Also, if the library is modified by someone
+else and passed on, the recipients should know that what they have is not
+the original version, so that the original author's reputation will not be
+affected by problems that might be introduced by others.
+
+Finally, software patents pose a constant threat to the existence of any free
+program. We wish to make sure that a company cannot effectively restrict the
+users of a free program by obtaining a restrictive license from a patent holder.
+Therefore, we insist that any patent license obtained for a version of the
+library must be consistent with the full freedom of use specified in this
+license.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License. This license, the GNU Lesser General Public License,
+applies to certain designated libraries, and is quite different from the ordinary
+General Public License. We use this license for certain libraries in order
+to permit linking those libraries into non-free programs.
+
+When a program is linked with a library, whether statically or using a shared
+library, the combination of the two is legally speaking a combined work, a
+derivative of the original library. The ordinary General Public License therefore
+permits such linking only if the entire combination fits its criteria of freedom.
+The Lesser General Public License permits more lax criteria for linking other
+code with the library.
+
+We call this license the "Lesser" General Public License because it does Less
+to protect the user's freedom than the ordinary General Public License. It
+also provides other free software developers Less of an advantage over competing
+non-free programs. These disadvantages are the reason we use the ordinary
+General Public License for many libraries. However, the Lesser license provides
+advantages in certain special circumstances.
+
+For example, on rare occasions, there may be a special need to encourage the
+widest possible use of a certain library, so that it becomes a de-facto standard.
+To achieve this, non-free programs must be allowed to use the library. A more
+frequent case is that a free library does the same job as widely used non-free
+libraries. In this case, there is little to gain by limiting the free library
+to free software only, so we use the Lesser General Public License.
+
+In other cases, permission to use a particular library in non-free programs
+enables a greater number of people to use a large body of free software. For
+example, permission to use the GNU C Library in non-free programs enables
+many more people to use the whole GNU operating system, as well as its variant,
+the GNU/Linux operating system.
+
+Although the Lesser General Public License is Less protective of the users'
+freedom, it does ensure that the user of a program that is linked with the
+Library has the freedom and the wherewithal to run that program using a modified
+version of the Library.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code derived
+from the library, whereas the latter must be combined with the library in
+order to run.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library or other program
+which contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Lesser General
+Public License (also called "this License"). Each licensee is addressed as
+"you".
+
+A "library" means a collection of software functions and/or data prepared
+so as to be conveniently linked with application programs (which use some
+of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means either
+the Library or any derivative work under copyright law: that is to say, a
+work containing the Library or a portion of it, either verbatim or with modifications
+and/or translated straightforwardly into another language. (Hereinafter, translation
+is included without limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making modifications
+to it. For a library, complete source code means all the source code for all
+modules it contains, plus any associated interface definition files, plus
+the scripts used to control compilation and installation of the library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is covered
+only if its contents constitute a work based on the Library (independent of
+the use of the Library in a tool for writing it). Whether that is true depends
+on what the Library does and what the program that uses the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and disclaimer
+of warranty; keep intact all the notices that refer to this License and to
+the absence of any warranty; and distribute a copy of this License along with
+the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it,
+thus forming a work based on the Library, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all
+of these conditions:
+
+ a) The modified work must itself be a software library.
+
+b) You must cause the files modified to carry prominent notices stating that
+you changed the files and the date of any change.
+
+c) You must cause the whole of the work to be licensed at no charge to all
+third parties under the terms of this License.
+
+d) If a facility in the modified Library refers to a function or a table of
+data to be supplied by an application program that uses the facility, other
+than as an argument passed when the facility is invoked, then you must make
+a good faith effort to ensure that, in the event an application does not supply
+such function or table, the facility still operates, and performs whatever
+part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose
+that is entirely well-defined independent of the application. Therefore, Subsection
+2d requires that any application-supplied function or table used by this function
+must be optional: if the application does not supply it, the square root function
+must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Library, the distribution of the whole must be
+on the terms of this License, whose permissions for other licensees extend
+to the entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise
+the right to control the distribution of derivative or collective works based
+on the Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License
+instead of this License to a given copy of the Library. To do this, you must
+alter all the notices that refer to this License, so that they refer to the
+ordinary GNU General Public License, version 2, instead of to this License.
+(If a newer version than version 2 of the ordinary GNU General Public License
+has appeared, then you can specify that version instead if you wish.) Do not
+make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy,
+so the ordinary GNU General Public License applies to all subsequent copies
+and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of
+it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you accompany it with the complete corresponding
+machine-readable source code, which must be distributed under the terms of
+Sections 1 and 2 above on a medium customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a designated
+place, then offering equivalent access to copy the source code from the same
+place satisfies the requirement to distribute the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+5. A program that contains no derivative of any portion of the Library, but
+is designed to work with the Library by being compiled or linked with it,
+is called a "work that uses the Library". Such a work, in isolation, is not
+a derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for distribution
+of such executables.
+
+When a "work that uses the Library" uses material from a header file that
+is part of the Library, the object code for the work may be a derivative work
+of the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not precisely
+defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts
+and accessors, and small macros and small inline functions (ten lines or less
+in length), then the use of the object file is unrestricted, regardless of
+whether it is legally a derivative work. (Executables containing this object
+code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute
+the object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are linked
+directly with the Library itself.
+
+6. As an exception to the Sections above, you may also combine or link a "work
+that uses the Library" with the Library to produce a work containing portions
+of the Library, and distribute that work under terms of your choice, provided
+that the terms permit modification of the work for the customer's own use
+and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library
+is used in it and that the Library and its use are covered by this License.
+You must supply a copy of this License. If the work during execution displays
+copyright notices, you must include the copyright notice for the Library among
+them, as well as a reference directing the user to the copy of this License.
+Also, you must do one of these things:
+
+a) Accompany the work with the complete corresponding machine-readable source
+code for the Library including whatever changes were used in the work (which
+must be distributed under Sections 1 and 2 above); and, if the work is an
+executable linked with the Library, with the complete machine-readable "work
+that uses the Library", as object code and/or source code, so that the user
+can modify the Library and then relink to produce a modified executable containing
+the modified Library. (It is understood that the user who changes the contents
+of definitions files in the Library will not necessarily be able to recompile
+the application to use the modified definitions.)
+
+b) Use a suitable shared library mechanism for linking with the Library. A
+suitable mechanism is one that (1) uses at run time a copy of the library
+already present on the user's computer system, rather than copying library
+functions into the executable, and (2) will operate properly with a modified
+version of the library, if the user installs one, as long as the modified
+version is interface-compatible with the version that the work was made with.
+
+c) Accompany the work with a written offer, valid for at least three years,
+to give the same user the materials specified in Subsection 6a, above, for
+a charge no more than the cost of performing this distribution.
+
+d) If distribution of the work is made by offering access to copy from a designated
+place, offer equivalent access to copy the above specified materials from
+the same place.
+
+e) Verify that the user has already received a copy of these materials or
+that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library" must
+include any data and utility programs needed for reproducing the executable
+from it. However, as a special exception, the materials to be distributed
+need not include anything that is normally distributed (in either source or
+binary form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component itself
+accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating system.
+Such a contradiction means you cannot use both them and the Library together
+in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library side-by-side
+in a single library together with other library facilities not covered by
+this License, and distribute such a combined library, provided that the separate
+distribution of the work based on the Library and of the other library facilities
+is otherwise permitted, and provided that you do these two things:
+
+a) Accompany the combined library with a copy of the same work based on the
+Library, uncombined with any other library facilities. This must be distributed
+under the terms of the Sections above.
+
+b) Give prominent notice with the combined library of the fact that part of
+it is a work based on the Library, and explaining where to find the accompanying
+uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the Library
+except as expressly provided under this License. Any attempt otherwise to
+copy, modify, sublicense, link with, or distribute the Library is void, and
+will automatically terminate your rights under this License. However, parties
+who have received copies, or rights, from you under this License will not
+have their licenses terminated so long as such parties remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed
+it. However, nothing else grants you permission to modify or distribute the
+Library or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the Library
+(or any work based on the Library), you indicate your acceptance of this License
+to do so, and all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the Library),
+the recipient automatically receives a license from the original licensor
+to copy, distribute, link with or modify the Library subject to these terms
+and conditions. You may not impose any further restrictions on the recipients'
+exercise of the rights granted herein. You are not responsible for enforcing
+compliance by third parties with this License.
+
+11. If, as a consequence of a court judgment or allegation of patent infringement
+or for any other reason (not limited to patent issues), conditions are imposed
+on you (whether by court order, agreement or otherwise) that contradict the
+conditions of this License, they do not excuse you from the conditions of
+this License. If you cannot distribute so as to satisfy simultaneously your
+obligations under this License and any other pertinent obligations, then as
+a consequence you may not distribute the Library at all. For example, if a
+patent license would not permit royalty-free redistribution of the Library
+by all those who receive copies directly or indirectly through you, then the
+only way you could satisfy both it and this License would be to refrain entirely
+from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents
+or other property right claims or to contest validity of any such claims;
+this section has the sole purpose of protecting the integrity of the free
+software distribution system which is implemented by public license practices.
+Many people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose
+that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain
+countries either by patents or by copyrighted interfaces, the original copyright
+holder who places the Library under this License may add an explicit geographical
+distribution limitation excluding those countries, so that distribution is
+permitted only in or among countries not thus excluded. In such case, this
+License incorporates the limitation as if written in the body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of
+the Lesser General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to address
+new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library specifies
+a version number of this License which applies to it and "any later version",
+you have the option of following the terms and conditions either of that version
+or of any later version published by the Free Software Foundation. If the
+Library does not specify a license version number, you may choose any version
+ever published by the Free Software Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs
+whose distribution conditions are incompatible with these, write to the author
+to ask for permission. For software which is copyrighted by the Free Software
+Foundation, write to the Free Software Foundation; we sometimes make exceptions
+for this. Our decision will be guided by the two goals of preserving the free
+status of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
+"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
+OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
+THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
+OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
+OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
+OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+
+If you develop a new library, and you want it to be of the greatest possible
+use to the public, we recommend making it free software that everyone can
+redistribute and change. You can do so by permitting redistribution under
+these terms (or, alternatively, under the terms of the ordinary General Public
+License).
+
+To apply these terms, attach the following notices to the library. It is safest
+to attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the "copyright"
+line and a pointer to where the full notice is found.
+
+<one line to give the library's name and an idea of what it does.>
+
+Copyright (C) <year> <name of author>
+
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free
+Software Foundation; either version 2.1 of the License, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this library; if not, write to the Free Software Foundation, Inc., 51
+Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the library, if necessary. Here
+is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+
+the library `Frob' (a library for tweaking knobs) written
+
+by James Random Hacker.
+
+< signature of Ty Coon > , 1 April 1990
+
+Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+GNU LESSER GENERAL PUBLIC LICENSE
+
+Version 3, 29 June 2007
+
+Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+This version of the GNU Lesser General Public License incorporates the terms
+and conditions of version 3 of the GNU General Public License, supplemented
+by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+
+
+As used herein, "this License" refers to version 3 of the GNU Lesser General
+Public License, and the "GNU GPL" refers to version 3 of the GNU General Public
+License.
+
+
+
+"The Library" refers to a covered work governed by this License, other than
+an Application or a Combined Work as defined below.
+
+
+
+An "Application" is any work that makes use of an interface provided by the
+Library, but which is not otherwise based on the Library. Defining a subclass
+of a class defined by the Library is deemed a mode of using an interface provided
+by the Library.
+
+
+
+A "Combined Work" is a work produced by combining or linking an Application
+with the Library. The particular version of the Library with which the Combined
+Work was made is also called the "Linked Version".
+
+
+
+The "Minimal Corresponding Source" for a Combined Work means the Corresponding
+Source for the Combined Work, excluding any source code for portions of the
+Combined Work that, considered in isolation, are based on the Application,
+and not on the Linked Version.
+
+
+
+The "Corresponding Application Code" for a Combined Work means the object
+code and/or source code for the Application, including any data and utility
+programs needed for reproducing the Combined Work from the Application, but
+excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+You may convey a covered work under sections 3 and 4 of this License without
+being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+If you modify a copy of the Library, and, in your modifications, a facility
+refers to a function or data to be supplied by an Application that uses the
+facility (other than as an argument passed when the facility is invoked),
+then you may convey a copy of the modified version:
+
+a) under this License, provided that you make a good faith effort to ensure
+that, in the event an Application does not supply the function or data, the
+facility still operates, and performs whatever part of its purpose remains
+meaningful, or
+
+b) under the GNU GPL, with none of the additional permissions of this License
+applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+The object code form of an Application may incorporate material from a header
+file that is part of the Library. You may convey such object code under terms
+of your choice, provided that, if the incorporated material is not limited
+to numerical parameters, data structure layouts and accessors, or small macros,
+inline functions and templates (ten or fewer lines in length), you do both
+of the following:
+
+a) Give prominent notice with each copy of the object code that the Library
+is used in it and that the Library and its use are covered by this License.
+
+b) Accompany the object code with a copy of the GNU GPL and this license document.
+
+ 4. Combined Works.
+
+You may convey a Combined Work under terms of your choice that, taken together,
+effectively do not restrict modification of the portions of the Library contained
+in the Combined Work and reverse engineering for debugging such modifications,
+if you also do each of the following:
+
+a) Give prominent notice with each copy of the Combined Work that the Library
+is used in it and that the Library and its use are covered by this License.
+
+b) Accompany the Combined Work with a copy of the GNU GPL and this license
+document.
+
+c) For a Combined Work that displays copyright notices during execution, include
+the copyright notice for the Library among these notices, as well as a reference
+directing the user to the copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+0) Convey the Minimal Corresponding Source under the terms of this License,
+and the Corresponding Application Code in a form suitable for, and under terms
+that permit, the user to recombine or relink the Application with a modified
+version of the Linked Version to produce a modified Combined Work, in the
+manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
+
+1) Use a suitable shared library mechanism for linking with the Library. A
+suitable mechanism is one that (a) uses at run time a copy of the Library
+already present on the user's computer system, and (b) will operate properly
+with a modified version of the Library that is interface-compatible with the
+Linked Version.
+
+e) Provide Installation Information, but only if you would otherwise be required
+to provide such information under section 6 of the GNU GPL, and only to the
+extent that such information is necessary to install and execute a modified
+version of the Combined Work produced by recombining or relinking the Application
+with a modified version of the Linked Version. (If you use option 4d0, the
+Installation Information must accompany the Minimal Corresponding Source and
+Corresponding Application Code. If you use option 4d1, you must provide the
+Installation Information in the manner specified by section 6 of the GNU GPL
+for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+You may place library facilities that are a work based on the Library side
+by side in a single library together with other library facilities that are
+not Applications and are not covered by this License, and convey such a combined
+library under terms of your choice, if you do both of the following:
+
+a) Accompany the combined library with a copy of the same work based on the
+Library, uncombined with any other library facilities, conveyed under the
+terms of this License.
+
+b) Give prominent notice with the combined library that part of it is a work
+based on the Library, and explaining where to find the accompanying uncombined
+form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+The Free Software Foundation may publish revised and/or new versions of the
+GNU Lesser General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to address
+new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library as you
+received it specifies that a certain numbered version of the GNU Lesser General
+Public License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that published version or of
+any later version published by the Free Software Foundation. If the Library
+as you received it does not specify a version number of the GNU Lesser General
+Public License, you may choose any version of the GNU Lesser General Public
+License ever published by the Free Software Foundation.
+
+If the Library as you received it specifies that a proxy can decide whether
+future versions of the GNU Lesser General Public License shall apply, that
+proxy's public statement of acceptance of any version is permanent authorization
+for you to choose that version for the Library.
--- /dev/null
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 3 of
+the license or (at your option) at any later version that is
+accepted by the membership of KDE e.V. (or its successor
+approved by the membership of KDE e.V.), which shall act as a
+proxy as defined in Section 14 of version 3 of the license.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
--- /dev/null
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 3 of the license or (at your option) any later version
+that is accepted by the membership of KDE e.V. (or its successor
+approved by the membership of KDE e.V.), which shall act as a
+proxy as defined in Section 6 of version 3 of the license.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
--- /dev/null
+Commercial License Usage
+Licensees holding valid commercial Qt licenses may use this file in
+accordance with the commercial license agreement provided with the
+Software or, alternatively, in accordance with the terms contained in
+a written agreement between you and The Qt Company. For licensing terms
+and conditions see https://www.qt.io/terms-conditions. For further
+information use the contact form at https://www.qt.io/contact-us.
--- /dev/null
+Mozilla Public License Version 1.1
+
+ 1. Definitions.
+
+1.0.1. "Commercial Use" means distribution or otherwise making the Covered
+Code available to a third party.
+
+1.1. "Contributor" means each entity that creates or contributes to the creation
+of Modifications.
+
+1.2. "Contributor Version" means the combination of the Original Code, prior
+Modifications used by a Contributor, and the Modifications made by that particular
+Contributor.
+
+1.3. "Covered Code" means the Original Code or Modifications or the combination
+of the Original Code and Modifications, in each case including portions thereof.
+
+1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted
+in the software development community for the electronic transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source Code.
+
+1.6. "Initial Developer" means the individual or entity identified as the
+Initial Developer in the Source Code notice required by Exhibit A.
+
+1.7. "Larger Work" means a work which combines Covered Code or portions thereof
+with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+1.8.1. "Licensable" means having the right to grant, to the maximum extent
+possible, whether at the time of the initial grant or subsequently acquired,
+any and all of the rights conveyed herein.
+
+1.9. "Modifications" means any addition to or deletion from the substance
+or structure of either the Original Code or any previous Modifications. When
+Covered Code is released as a series of files, a Modification is:
+
+Any addition to or deletion from the contents of a file containing Original
+Code or previous Modifications.
+
+Any new file that contains any part of the Original Code or previous Modifications.
+
+1.10. "Original Code" means Source Code of computer software code which is
+described in the Source Code notice required by Exhibit A as Original Code,
+and which, at the time of its release under this License is not already Covered
+Code governed by this License.
+
+1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter
+acquired, including without limitation, method, process, and apparatus claims,
+in any patent Licensable by grantor.
+
+1.11. "Source Code" means the preferred form of the Covered Code for making
+modifications to it, including all modules it contains, plus any associated
+interface definition files, scripts used to control compilation and installation
+of an Executable, or source code differential comparisons against either the
+Original Code or another well known, available Covered Code of the Contributor's
+choice. The Source Code can be in a compressed or archival form, provided
+the appropriate decompression or de-archiving software is widely available
+for no charge.
+
+1.12. "You" (or "Your") means an individual or a legal entity exercising rights
+under, and complying with all of the terms of, this License or a future version
+of this License issued under Section 6.1. For legal entities, "You" includes
+any entity which controls, is controlled by, or is under common control with
+You. For purposes of this definition, "control" means (a) the power, direct
+or indirect, to cause the direction or management of such entity, whether
+by contract or otherwise, or (b) ownership of more than fifty percent (50%)
+of the outstanding shares or beneficial ownership of such entity.
+
+ 2. Source Code License.
+
+2.1. The Initial Developer Grant. The Initial Developer hereby grants You
+a world-wide, royalty-free, non-exclusive license, subject to third party
+intellectual property claims:
+
+a. under intellectual property rights (other than patent or trademark) Licensable
+by Initial Developer to use, reproduce, modify, display, perform, sublicense
+and distribute the Original Code (or portions thereof) with or without Modifications,
+and/or as part of a Larger Work; and
+
+b. under Patents Claims infringed by the making, using or selling of Original
+Code, to make, have made, use, practice, sell, and offer for sale, and/or
+otherwise dispose of the Original Code (or portions thereof).
+
+c. the licenses granted in this Section 2.1 (a) and (b) are effective on the
+date Initial Developer first distributes Original Code under the terms of
+this License.
+
+d. Notwithstanding Section 2.1 (b) above, no patent license is granted: 1)
+for code that You delete from the Original Code; 2) separate from the Original
+Code; or 3) for infringements caused by: i) the modification of the Original
+Code or ii) the combination of the Original Code with other software or devices.
+
+2.2. Contributor Grant. Subject to third party intellectual property claims,
+each Contributor hereby grants You a world-wide, royalty-free, non-exclusive
+license
+
+a. under intellectual property rights (other than patent or trademark) Licensable
+by Contributor, to use, reproduce, modify, display, perform, sublicense and
+distribute the Modifications created by such Contributor (or portions thereof)
+either on an unmodified basis, with other Modifications, as Covered Code and/or
+as part of a Larger Work; and
+
+b. under Patent Claims infringed by the making, using, or selling of Modifications
+made by that Contributor either alone and/or in combination with its Contributor
+Version (or portions of such combination), to make, use, sell, offer for sale,
+have made, and/or otherwise dispose of: 1) Modifications made by that Contributor
+(or portions thereof); and 2) the combination of Modifications made by that
+Contributor with its Contributor Version (or portions of such combination).
+
+c. the licenses granted in Sections 2.2 (a) and 2.2 (b) are effective on the
+date Contributor first makes Commercial Use of the Covered Code.
+
+d. Notwithstanding Section 2.2 (b) above, no patent license is granted: 1)
+for any code that Contributor has deleted from the Contributor Version; 2)
+separate from the Contributor Version; 3) for infringements caused by: i)
+third party modifications of Contributor Version or ii) the combination of
+Modifications made by that Contributor with other software (except as part
+of the Contributor Version) or other devices; or 4) under Patent Claims infringed
+by Covered Code in the absence of Modifications made by that Contributor.
+
+ 3. Distribution Obligations.
+
+3.1. Application of License. The Modifications which You create or to which
+You contribute are governed by the terms of this License, including without
+limitation Section 2.2. The Source Code version of Covered Code may be distributed
+only under the terms of this License or a future version of this License released
+under Section 6.1, and You must include a copy of this License with every
+copy of the Source Code You distribute. You may not offer or impose any terms
+on any Source Code version that alters or restricts the applicable version
+of this License or the recipients' rights hereunder. However, You may include
+an additional document offering the additional rights described in Section
+3.5.
+
+3.2. Availability of Source Code. Any Modification which You create or to
+which You contribute must be made available in Source Code form under the
+terms of this License either on the same media as an Executable version or
+via an accepted Electronic Distribution Mechanism to anyone to whom you made
+an Executable version available; and if made available via Electronic Distribution
+Mechanism, must remain available for at least twelve (12) months after the
+date it initially became available, or at least six (6) months after a subsequent
+version of that particular Modification has been made available to such recipients.
+You are responsible for ensuring that the Source Code version remains available
+even if the Electronic Distribution Mechanism is maintained by a third party.
+
+3.3. Description of Modifications. You must cause all Covered Code to which
+You contribute to contain a file documenting the changes You made to create
+that Covered Code and the date of any change. You must include a prominent
+statement that the Modification is derived, directly or indirectly, from Original
+Code provided by the Initial Developer and including the name of the Initial
+Developer in (a) the Source Code, and (b) in any notice in an Executable version
+or related documentation in which You describe the origin or ownership of
+the Covered Code.
+
+ 3.4. Intellectual Property Matters
+
+ (a) Third Party Claims
+
+If Contributor has knowledge that a license under a third party's intellectual
+property rights is required to exercise the rights granted by such Contributor
+under Sections 2.1 or 2.2, Contributor must include a text file with the Source
+Code distribution titled "LEGAL" which describes the claim and the party making
+the claim in sufficient detail that a recipient will know whom to contact.
+If Contributor obtains such knowledge after the Modification is made available
+as described in Section 3.2, Contributor shall promptly modify the LEGAL file
+in all copies Contributor makes available thereafter and shall take other
+steps (such as notifying appropriate mailing lists or newsgroups) reasonably
+calculated to inform those who received the Covered Code that new knowledge
+has been obtained.
+
+ (b) Contributor APIs
+
+If Contributor's Modifications include an application programming interface
+and Contributor has knowledge of patent licenses which are reasonably necessary
+to implement that API, Contributor must also include this information in the
+LEGAL file.
+
+ (c) Representations.
+
+Contributor represents that, except as disclosed pursuant to Section 3.4 (a)
+above, Contributor believes that Contributor's Modifications are Contributor's
+original creation(s) and/or Contributor has sufficient rights to grant the
+rights conveyed by this License.
+
+3.5. Required Notices. You must duplicate the notice in Exhibit A in each
+file of the Source Code. If it is not possible to put such notice in a particular
+Source Code file due to its structure, then You must include such notice in
+a location (such as a relevant directory) where a user would be likely to
+look for such a notice. If You created one or more Modification(s) You may
+add your name as a Contributor to the notice described in Exhibit A. You must
+also duplicate this License in any documentation for the Source Code where
+You describe recipients' rights or ownership rights relating to Covered Code.
+You may choose to offer, and to charge a fee for, warranty, support, indemnity
+or liability obligations to one or more recipients of Covered Code. However,
+You may do so only on Your own behalf, and not on behalf of the Initial Developer
+or any Contributor. You must make it absolutely clear than any such warranty,
+support, indemnity or liability obligation is offered by You alone, and You
+hereby agree to indemnify the Initial Developer and every Contributor for
+any liability incurred by the Initial Developer or such Contributor as a result
+of warranty, support, indemnity or liability terms You offer.
+
+3.6. Distribution of Executable Versions. You may distribute Covered Code
+in Executable form only if the requirements of Sections 3.1, 3.2, 3.3, 3.4
+and 3.5 have been met for that Covered Code, and if You include a notice stating
+that the Source Code version of the Covered Code is available under the terms
+of this License, including a description of how and where You have fulfilled
+the obligations of Section 3.2. The notice must be conspicuously included
+in any notice in an Executable version, related documentation or collateral
+in which You describe recipients' rights relating to the Covered Code. You
+may distribute the Executable version of Covered Code or ownership rights
+under a license of Your choice, which may contain terms different from this
+License, provided that You are in compliance with the terms of this License
+and that the license for the Executable version does not attempt to limit
+or alter the recipient's rights in the Source Code version from the rights
+set forth in this License. If You distribute the Executable version under
+a different license You must make it absolutely clear that any terms which
+differ from this License are offered by You alone, not by the Initial Developer
+or any Contributor. You hereby agree to indemnify the Initial Developer and
+every Contributor for any liability incurred by the Initial Developer or such
+Contributor as a result of any such terms You offer.
+
+3.7. Larger Works. You may create a Larger Work by combining Covered Code
+with other code not governed by the terms of this License and distribute the
+Larger Work as a single product. In such a case, You must make sure the requirements
+of this License are fulfilled for the Covered Code.
+
+ 4. Inability to Comply Due to Statute or Regulation.
+
+If it is impossible for You to comply with any of the terms of this License
+with respect to some or all of the Covered Code due to statute, judicial order,
+or regulation then You must: (a) comply with the terms of this License to
+the maximum extent possible; and (b) describe the limitations and the code
+they affect. Such description must be included in the LEGAL file described
+in Section 3.4 and must be included with all distributions of the Source Code.
+Except to the extent prohibited by statute or regulation, such description
+must be sufficiently detailed for a recipient of ordinary skill to be able
+to understand it.
+
+ 5. Application of this License.
+
+This License applies to code to which the Initial Developer has attached the
+notice in Exhibit A and to related Covered Code.
+
+ 6. Versions of the License.
+
+ 6.1. New Versions
+
+Netscape Communications Corporation ("Netscape") may publish revised and/or
+new versions of the License from time to time. Each version will be given
+a distinguishing version number.
+
+ 6.2. Effect of New Versions
+
+Once Covered Code has been published under a particular version of the License,
+You may always continue to use it under the terms of that version. You may
+also choose to use such Covered Code under the terms of any subsequent version
+of the License published by Netscape. No one other than Netscape has the right
+to modify the terms applicable to Covered Code created under this License.
+
+ 6.3. Derivative Works
+
+If You create or use a modified version of this License (which you may only
+do in order to apply it to code which is not already Covered Code governed
+by this License), You must (a) rename Your license so that the phrases "Mozilla",
+"MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar
+phrase do not appear in your license (except to note that your license differs
+from this License) and (b) otherwise make it clear that Your version of the
+license contains terms which differ from the Mozilla Public License and Netscape
+Public License. (Filling in the name of the Initial Developer, Original Code
+or Contributor in the notice described in Exhibit A shall not of themselves
+be deemed to be modifications of this License.)
+
+ 7. DISCLAIMER OF WARRANTY
+
+COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
+THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
+PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
+OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN
+ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME
+THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED
+CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+ 8. Termination
+
+8.1. This License and the rights granted hereunder will terminate automatically
+if You fail to comply with terms herein and fail to cure such breach within
+30 days of becoming aware of the breach. All sublicenses to the Covered Code
+which are properly granted shall survive any termination of this License.
+Provisions which, by their nature, must remain in effect beyond the termination
+of this License shall survive.
+
+8.2. If You initiate litigation by asserting a patent infringement claim (excluding
+declatory judgment actions) against Initial Developer or a Contributor (the
+Initial Developer or Contributor against whom You file such action is referred
+to as "Participant") alleging that:
+
+a. such Participant's Contributor Version directly or indirectly infringes
+any patent, then any and all rights granted by such Participant to You under
+Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant
+terminate prospectively, unless if within 60 days after receipt of notice
+You either: (i) agree in writing to pay Participant a mutually agreeable reasonable
+royalty for Your past and future use of Modifications made by such Participant,
+or (ii) withdraw Your litigation claim with respect to the Contributor Version
+against such Participant. If within 60 days of notice, a reasonable royalty
+and payment arrangement are not mutually agreed upon in writing by the parties
+or the litigation claim is not withdrawn, the rights granted by Participant
+to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration
+of the 60 day notice period specified above.
+
+b. any software, hardware, or device, other than such Participant's Contributor
+Version, directly or indirectly infringes any patent, then any rights granted
+to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective
+as of the date You first made, used, sold, distributed, or had made, Modifications
+made by that Participant.
+
+8.3. If You assert a patent infringement claim against Participant alleging
+that such Participant's Contributor Version directly or indirectly infringes
+any patent where such claim is resolved (such as by license or settlement)
+prior to the initiation of patent infringement litigation, then the reasonable
+value of the licenses granted by such Participant under Sections 2.1 or 2.2
+shall be taken into account in determining the amount or value of any payment
+or license.
+
+8.4. In the event of termination under Sections 8.1 or 8.2 above, all end
+user license agreements (excluding distributors and resellers) which have
+been validly granted by You or any distributor hereunder prior to termination
+shall survive termination.
+
+ 9. LIMITATION OF LIABILITY
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING
+NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY
+OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF
+ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES
+FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY
+AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE
+BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY
+SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH
+PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION.
+SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL
+OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO
+YOU.
+
+ 10. U.S. government end users
+
+The Covered Code is a "commercial item," as that term is defined in 48 C.F.R.
+2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial
+computer software documentation," as such terms are used in 48 C.F.R. 12.212
+(Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through
+227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code
+with only those rights set forth herein.
+
+ 11. Miscellaneous
+
+This License represents the complete agreement concerning subject matter hereof.
+If any provision of this License is held to be unenforceable, such provision
+shall be reformed only to the extent necessary to make it enforceable. This
+License shall be governed by California law provisions (except to the extent
+applicable law, if any, provides otherwise), excluding its conflict-of-law
+provisions. With respect to disputes in which at least one party is a citizen
+of, or an entity chartered or registered to do business in the United States
+of America, any litigation relating to this License shall be subject to the
+jurisdiction of the Federal Courts of the Northern District of California,
+with venue lying in Santa Clara County, California, with the losing party
+responsible for costs, including without limitation, court costs and reasonable
+attorneys' fees and expenses. The application of the United Nations Convention
+on Contracts for the International Sale of Goods is expressly excluded. Any
+law or regulation which provides that the language of a contract shall be
+construed against the drafter shall not apply to this License.
+
+ 12. Responsibility for claims
+
+As between Initial Developer and the Contributors, each party is responsible
+for claims and damages arising, directly or indirectly, out of its utilization
+of rights under this License and You agree to work with Initial Developer
+and Contributors to distribute such responsibility on an equitable basis.
+Nothing herein is intended or shall be deemed to constitute any admission
+of liability.
+
+ 13. Multiple-licensed code
+
+Initial Developer may designate portions of the Covered Code as "Multiple-Licensed".
+"Multiple-Licensed" means that the Initial Developer permits you to utilize
+portions of the Covered Code under Your choice of the MPL or the alternative
+licenses, if any, specified by the Initial Developer in the file described
+in Exhibit A. Exhibit A - Mozilla Public License.
+
+"The contents of this file are subject to the Mozilla Public License Version
+1.1 (the "License"); you may not use this file except in compliance with the
+License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
+
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
+the specific language governing rights and limitations under the License.
+
+The Original Code is ______________________________________ .
+
+The Initial Developer of the Original Code is ________________________ .
+
+Portions created by ______________________ are Copyright (C) ______ . All
+Rights Reserved.
+
+Contributor(s): ______________________________________ .
+
+Alternatively, the contents of this file may be used under the terms of the
+_____ license (the " [___] License"), in which case the provisions of [______]
+License are applicable instead of those above. If you wish to allow use of
+your version of this file only under the terms of the [____] License and not
+to allow others to use your version of this file under the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the [___] License. If you do not delete the
+provisions above, a recipient may use your version of this file under either
+the MPL or the [___] License."
+
+NOTE: The text of this Exhibit A may differ slightly from the text of the
+notices in the Source Code files of the Original Code. You should use the
+text of this Exhibit A rather than the text found in the Original Code Source
+Code for Your Modifications.
--- /dev/null
+The Qt Company Qt LGPL Exception version 1.1
+
+As an additional permission to the GNU Lesser General Public License version 2.1, the object code form of a "work that uses the Library" may incorporate material from a header file that is part of the Library. You may distribute such object code under terms of your choice, provided that:
+
+ (i) the header files of the Library have not been modified; and
+
+ (ii) the incorporated material is limited to numerical parameters, data structure layouts, accessors, macros, inline functions and templates; and
+
+ (iii) you comply with the terms of Section 6 of the GNU Lesser General Public License version 2.1.
+
+Moreover, you may apply this exception to a modified version of the Library, provided that such modification does not involve copying material from the Library into the modified Library's header files unless such material is limited to
+
+ (i) numerical parameters;
+
+ (ii) data structure layouts;
+
+ (iii) accessors; and
+
+ (iv) small macros, templates and inline functions of five lines or less in length.
+
+Furthermore, you are not required to apply this additional permission to a modified version of the Library.
--- /dev/null
+# KCoreAddons
+
+Qt addon library with a collection of non-GUI utilities
+
+## Introduction
+
+KCoreAddons provides classes built on top of QtCore to perform various tasks
+such as manipulating mime types, autosaving files, creating backup files,
+generating random sequences, performing text manipulations such as macro
+replacement, accessing user information and many more.
+
--- /dev/null
+include(ECMAddTests)
+include(ConfigureChecks.cmake) #configure checks for QFileSystemWatcher
+
+find_package(Qt5Test ${REQUIRED_QT_VERSION} CONFIG QUIET)
+
+if(NOT Qt5Test_FOUND)
+ message(STATUS "Qt5Test not found, autotests will not be built.")
+ return()
+endif()
+
+if(NOT CMAKE_BUILD_TYPE MATCHES "[Dd]ebug$")
+ set(ENABLE_BENCHMARKS 1)
+endif()
+
+add_library(autotests_static STATIC)
+ecm_qt_declare_logging_category(autotests_static
+ HEADER kcoreaddons_debug.h
+ IDENTIFIER KCOREADDONS_DEBUG
+ CATEGORY_NAME kf.coreaddons
+ )
+target_link_libraries(autotests_static Qt5::Core)
+
+configure_file(config-tests.h.in config-tests.h)
+
+macro(build_plugin pname)
+ add_library(${pname} MODULE ${ARGN})
+ ecm_mark_as_test(${pname})
+ target_link_libraries(${pname} KF5::CoreAddons autotests_static)
+endmacro()
+
+# Build some sample plugins
+build_plugin(jsonplugin jsonplugin.cpp)
+build_plugin(jsonplugin2 jsonplugin2.cpp)
+build_plugin(versionedplugin versionedplugin.cpp)
+build_plugin(unversionedplugin unversionedplugin.cpp)
+build_plugin(multiplugin multiplugin.cpp)
+build_plugin(alwaysunloadplugin alwaysunloadplugin.cpp)
+
+add_definitions( -DKDELIBS4CONFIGMIGRATOR_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data" )
+
+if (WIN32)
+ set(autotests_OPTIONAL_SRCS
+ ${autotests_OPTIONAL_SRCS}
+ klistopenfilesjobtest_win.cpp
+ )
+endif ()
+
+if (UNIX)
+ set(autotests_OPTIONAL_SRCS
+ ${autotests_OPTIONAL_SRCS}
+ klistopenfilesjobtest_unix.cpp
+ )
+endif ()
+
+ecm_add_tests(
+ kaboutdatatest.cpp
+ kaboutdataapplicationdatatest.cpp
+ kautosavefiletest.cpp
+ kcompositejobtest.cpp
+ kformattest.cpp
+ kjobtest.cpp
+ kosreleasetest.cpp
+ kpluginfactorytest.cpp
+ kpluginloadertest.cpp
+ kpluginmetadatatest.cpp
+ kprocesstest.cpp
+ krandomtest.cpp
+ kshareddatacachetest.cpp
+ kshelltest.cpp
+ kurlmimedatatest.cpp
+ kstringhandlertest.cpp
+ kusertest.cpp
+ kdelibs4migrationtest.cpp
+ kdelibs4configmigratortest.cpp
+ kprocesslisttest.cpp
+ kfileutilstest.cpp
+ kfuzzymatchertest.cpp
+ knetworkmountstestcanonical.cpp
+ knetworkmountstestnoconfig.cpp
+ knetworkmountstestpaths.cpp
+ knetworkmountsteststatic.cpp
+ ${autotests_OPTIONAL_SRCS}
+ LINK_LIBRARIES Qt5::Test KF5::CoreAddons autotests_static
+)
+
+if(NOT CMAKE_CROSSCOMPILING)
+ ecm_add_tests(desktoptojsontest.cpp LINK_LIBRARIES Qt5::Test KF5::CoreAddons autotests_static)
+ target_compile_definitions(desktoptojsontest PRIVATE
+ DESKTOP_TO_JSON_EXE="$<TARGET_FILE:desktoptojson>"
+ )
+endif()
+
+ecm_add_test(ktexttohtmltest.cpp ${CMAKE_SOURCE_DIR}/src/lib/text/ktexttohtml.cpp
+ TEST_NAME ktexttohtmltest
+ LINK_LIBRARIES Qt5::Test autotests_static
+)
+# include the binary dir in order to get kcoreaddons_export.h
+target_include_directories(ktexttohtmltest PRIVATE ${KCoreAddons_BINARY_DIR}/src/lib)
+# fake static linking to prevent the export macros on Windows from kicking in
+target_compile_definitions(ktexttohtmltest PRIVATE -DKCOREADDONS_STATIC_DEFINE=1)
+
+add_executable(kprocesstest_helper kprocesstest_helper.cpp)
+target_link_libraries(kprocesstest_helper KF5::CoreAddons)
+
+target_compile_definitions(kpluginloadertest PRIVATE
+ JSONPLUGIN_FILE="$<TARGET_FILE:jsonplugin>"
+ VERSIONEDPLUGIN_FILE="$<TARGET_FILE:versionedplugin>"
+ UNVERSIONEDPLUGIN_FILE="$<TARGET_FILE:unversionedplugin>"
+ MULTIPLUGIN_FILE="$<TARGET_FILE:multiplugin>"
+ ALWAYSUNLOADPLUGIN_FILE="$<TARGET_FILE:alwaysunloadplugin>"
+)
+
+set(KDIRWATCH_BACKENDS_TO_TEST Stat)#Stat is always compiled
+
+if (HAVE_SYS_INOTIFY_H)
+ list(APPEND KDIRWATCH_BACKENDS_TO_TEST INotify)
+endif()
+
+if (HAVE_FAM)
+ list(APPEND KDIRWATCH_BACKENDS_TO_TEST Fam)
+endif()
+
+if (HAVE_QFILESYSTEMWATCHER)
+ list(APPEND KDIRWATCH_BACKENDS_TO_TEST QFSWatch)
+endif()
+
+foreach(_backendName ${KDIRWATCH_BACKENDS_TO_TEST})
+ string(TOLOWER ${_backendName} _lowercaseBackendName)
+ set(BACKEND_TEST_TARGET kdirwatch_${_lowercaseBackendName}_unittest)
+ add_executable(${BACKEND_TEST_TARGET} kdirwatch_unittest.cpp)
+ target_link_libraries(${BACKEND_TEST_TARGET} Qt5::Test KF5::CoreAddons autotests_static)
+
+ if(NOT WIN32)
+ target_link_libraries(${BACKEND_TEST_TARGET} Threads::Threads)
+ endif()
+
+ ecm_mark_as_test(${BACKEND_TEST_TARGET})
+ add_test(NAME ${BACKEND_TEST_TARGET} COMMAND ${BACKEND_TEST_TARGET})
+ target_compile_definitions(${BACKEND_TEST_TARGET} PUBLIC -DKDIRWATCH_TEST_METHOD=\"${_backendName}\")
+endforeach()
--- /dev/null
+set(CMAKE_REQUIRED_LIBRARIES Qt5::Core)
+check_cxx_source_compiles(
+"#include <QtCore/QFileSystemWatcher>
+int main()
+{
+ QFileSystemWatcher *watcher = new QFileSystemWatcher();
+ delete watcher;
+ return 0;
+}" HAVE_QFILESYSTEMWATCHER)
\ No newline at end of file
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Merry <alexmerry@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#include "alwaysunloadplugin.h"
+#include "kcoreaddons_debug.h"
+#include <QDebug>
+#include <kexportplugin.h>
+#include <kpluginfactory.h>
+
+AlwaysUnloadPlugin::AlwaysUnloadPlugin(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ qCDebug(KCOREADDONS_DEBUG) << "Created AlwaysUnloadPlugin with args" << args;
+}
+
+K_PLUGIN_FACTORY(AlwaysUnloadPluginFactory, registerPlugin<AlwaysUnloadPlugin>();)
+
+#include "alwaysunloadplugin.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Merry <alexmerry@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#ifndef ALWAYSUNLOADPLUGIN_H
+#define ALWAYSUNLOADPLUGIN_H
+
+#include <QObject>
+
+class AlwaysUnloadPlugin : public QObject
+{
+ Q_OBJECT
+
+public:
+ AlwaysUnloadPlugin(QObject *parent, const QVariantList &args);
+};
+
+#endif // ALWAYSUNLOADPLUGIN_H
--- /dev/null
+#cmakedefine01 ENABLE_BENCHMARKS
--- /dev/null
+[Desktop Entry]
+Name=NSA Plugin
+Name[ast]=Complementu NSA
+Name[bs]=NSA dodatak
+Name[ca]=Connector de la NSA
+Name[ca@valencia]=Connector de la NSA
+Name[cs]=Modul NSA
+Name[da]=NSA-plugin
+Name[de]=NSA-Modul
+Name[el]=NSA Plugin
+Name[en_GB]=NSA Plugin
+Name[es]=Complemento NSA
+Name[fi]=NSA-liitännäinen
+Name[gd]=Plugan NSA
+Name[gl]=Complemento de NSA
+Name[he]=תוסף NSA
+Name[hu]=NSA bővítmény
+Name[it]=Estensione NSA
+Name[ko]=NSA 플러그인
+Name[nb]=NSA programtillegg
+Name[nl]=NSA-plug-in
+Name[nn]=NSA-tillegg
+Name[pl]=Wtyczka NSA
+Name[pt]='Plugin' da NSA
+Name[pt_BR]=Plugin NSA
+Name[ru]=Модуль ФСБ
+Name[sk]=NSA plugin
+Name[sl]=Vstavek NSA
+Name[sr]=НСА‑ов прикључак
+Name[sr@ijekavian]=НСА‑ов прикључак
+Name[sr@ijekavianlatin]=NSA‑ov priključak
+Name[sr@latin]=NSA‑ov priključak
+Name[sv]=NSA-insticksprogram
+Name[tr]=NSA Eklentisi
+Name[uk]=Додаток NSA
+Name[x-test]=xxNSA Pluginxx
+Name[zh_CN]=NSA 插件
+Name[zh_TW]=NSA 外掛程式
+Comment=Test Plugin Spy
+Comment[ast]=Complementu de prueba qu'escluca
+Comment[bs]=Špijun provjere dodataka
+Comment[ca]=Connector de proves espia
+Comment[ca@valencia]=Connector de proves espia
+Comment[cs]=Testovací modul Spy
+Comment[da]=Test-plugin spion
+Comment[de]=Spionage-Testmodul
+Comment[el]=Test Plugin Spy
+Comment[en_GB]=Test Plugin Spy
+Comment[es]=Probar espía de complementos
+Comment[fi]=Testivakoiluliitännäinen
+Comment[gd]=Plugan deuchainneach brathadair
+Comment[gl]=Complemento espía de proba
+Comment[he]=בדיקת תוסף ריגול
+Comment[hu]=Kémbővítmény tesztelése
+Comment[it]=Estensione di prova Spy
+Comment[ko]=테스트 플러그인 첩자
+Comment[nb]=Test tilleggsspion
+Comment[nl]=Plug-in Spy testen
+Comment[nn]=Spion for test-tillegg
+Comment[pl]=Wypróbuj szpiega wtyczki
+Comment[pt]=Espião dos 'Plugins' de Testes
+Comment[pt_BR]=Plugin de teste de espionagem
+Comment[ru]=Тестовый прослушивающий модуль
+Comment[sk]=Testovací plugin špión
+Comment[sl]=Preizkusni vohunski vstavek
+Comment[sr]=Пробни прикључак шпијун
+Comment[sr@ijekavian]=Пробни прикључак шпијун
+Comment[sr@ijekavianlatin]=Probni priključak špijun
+Comment[sr@latin]=Probni priključak špijun
+Comment[sv]=Testa insticksprogramspion
+Comment[tr]=Test Eklenti Ajanı
+Comment[uk]=Тестовий додаток
+Comment[x-test]=xxTest Plugin Spyxx
+Comment[zh_CN]=Test Plugin Spy
+Comment[zh_TW]=測試外掛程式
+Type=Service
+Icon=preferences-system-time
+MimeType=image/png;application/pdf;
+
+X-KDE-ServiceTypes=KService/NSA
+X-KDE-Library=fakeplugin
+X-KDE-FormFactors=mediacenter,desktop
+X-KDE-PluginInfo-Author=Sebastian Kügler
+X-KDE-PluginInfo-Email=sebas@kde.org
+X-KDE-PluginInfo-Name=fakeplugin
+X-KDE-PluginInfo-Version=1.0
+X-KDE-PluginInfo-Website=https://kde.org/
+X-KDE-PluginInfo-Category=Examples
+X-KDE-PluginInfo-License=LGPL
+X-KDE-PluginInfo-EnabledByDefault=true
--- /dev/null
+[Desktop Entry]
+Name=NSA Plugin
+Name[ast]=Complementu NSA
+Name[bs]=NSA dodatak
+Name[ca]=Connector de la NSA
+Name[ca@valencia]=Connector de la NSA
+Name[cs]=Modul NSA
+Name[da]=NSA-plugin
+Name[de]=NSA-Modul
+Name[el]=NSA Plugin
+Name[en_GB]=NSA Plugin
+Name[es]=Complemento NSA
+Name[fi]=NSA-liitännäinen
+Name[gd]=Plugan NSA
+Name[gl]=Complemento de NSA
+Name[he]=תוסף NSA
+Name[hu]=NSA bővítmény
+Name[it]=Estensione NSA
+Name[ko]=NSA 플러그인
+Name[nb]=NSA programtillegg
+Name[nl]=NSA-plug-in
+Name[nn]=NSA-tillegg
+Name[pl]=Wtyczka NSA
+Name[pt]='Plugin' da NSA
+Name[pt_BR]=Plugin NSA
+Name[ru]=Модуль ФСБ
+Name[sk]=NSA plugin
+Name[sl]=Vstavek NSA
+Name[sr]=НСА‑ов прикључак
+Name[sr@ijekavian]=НСА‑ов прикључак
+Name[sr@ijekavianlatin]=NSA‑ov priključak
+Name[sr@latin]=NSA‑ov priključak
+Name[sv]=NSA-insticksprogram
+Name[tr]=NSA Eklentisi
+Name[uk]=Додаток NSA
+Name[x-test]=xxNSA Pluginxx
+Name[zh_CN]=NSA 插件
+Name[zh_TW]=NSA 外掛程式
+Comment=Test Plugin Spy
+Comment[ast]=Complementu de prueba qu'escluca
+Comment[bs]=Špijun provjere dodataka
+Comment[ca]=Connector de proves espia
+Comment[ca@valencia]=Connector de proves espia
+Comment[cs]=Testovací modul Spy
+Comment[da]=Test-plugin spion
+Comment[de]=Spionage-Testmodul
+Comment[el]=Test Plugin Spy
+Comment[en_GB]=Test Plugin Spy
+Comment[es]=Probar espía de complementos
+Comment[fi]=Testivakoiluliitännäinen
+Comment[gd]=Plugan deuchainneach brathadair
+Comment[gl]=Complemento espía de proba
+Comment[he]=בדיקת תוסף ריגול
+Comment[hu]=Kémbővítmény tesztelése
+Comment[it]=Estensione di prova Spy
+Comment[ko]=테스트 플러그인 첩자
+Comment[nb]=Test tilleggsspion
+Comment[nl]=Plug-in Spy testen
+Comment[nn]=Spion for test-tillegg
+Comment[pl]=Wypróbuj szpiega wtyczki
+Comment[pt]=Espião dos 'Plugins' de Testes
+Comment[pt_BR]=Plugin de teste de espionagem
+Comment[ru]=Тестовый прослушивающий модуль
+Comment[sk]=Testovací plugin špión
+Comment[sl]=Preizkusni vohunski vstavek
+Comment[sr]=Пробни прикључак шпијун
+Comment[sr@ijekavian]=Пробни прикључак шпијун
+Comment[sr@ijekavianlatin]=Probni priključak špijun
+Comment[sr@latin]=Probni priključak špijun
+Comment[sv]=Testa insticksprogramspion
+Comment[tr]=Test Eklenti Ajanı
+Comment[uk]=Тестовий додаток
+Comment[x-test]=xxTest Plugin Spyxx
+Comment[zh_CN]=Test Plugin Spy
+Comment[zh_TW]=測試外掛程式
+Type=Service
+Icon=preferences-system-time
+Hidden=true
+
+X-KDE-ServiceTypes=KService/NSA
+X-KDE-Library=fakeplugin
+
+X-KDE-PluginInfo-Author=Sebastian Kügler
+X-KDE-PluginInfo-Email=sebas@kde.org
+X-KDE-PluginInfo-Name=fakeplugin
+X-KDE-PluginInfo-Version=1.0
+X-KDE-PluginInfo-Website=https://kde.org/
+X-KDE-PluginInfo-Category=Examples
+X-KDE-PluginInfo-License=LGPL
+X-KDE-PluginInfo-EnabledByDefault=true
--- /dev/null
+NAME="Name"
+VERSION="100.5"
+ID=theid
+ID_LIKE="otherid otherotherid"
+VERSION_CODENAME=versioncodename
+VERSION_ID="500.1"
+PRETTY_NAME="Pretty Name #1"
+ANSI_COLOR="1;34"
+CPE_NAME="cpe:/o:foo:bar:100"
+HOME_URL="https://url.home"
+DOCUMENTATION_URL="https://url.docs"
+SUPPORT_URL="https://url.support"
+BUG_REPORT_URL="https://url.bugs"
+PRIVACY_POLICY_URL="https://url.privacy"
+BUILD_ID="105.5"
+# comment
+VARIANT="Test = Edition"
+BROKENLINE_SHOULD_BE_IGNORED
+VARIANT_ID=test
+ # indented comment
+LOGO=start-here-test
+DEBIAN_BTS="debbugs://bugs.debian.org/"
--- /dev/null
+[Desktop Entry]
+Name=Bad Groups
+Name[ca]=Grups dolents
+Name[ca@valencia]=Grups dolents
+Name[da]=Dårlige grupper
+Name[de]=Schlechte Gruppen
+Name[el]=Κακές ομάδες
+Name[en_GB]=Bad Groups
+Name[es]=Grupos incorrectos
+Name[fi]=Huonot ryhmät
+Name[gl]=Grupos malos
+Name[it]=Gruppi errati
+Name[ko]=불량 그룹
+Name[nl]=Foute groepen
+Name[pl]=Złe grupy
+Name[pt]=Grupos Inválidos
+Name[pt_BR]=Grupos inválidos
+Name[sk]=Zlé skupiny
+Name[sl]=Slabe skupine
+Name[sr]=Лоше групе
+Name[sr@ijekavian]=Лоше групе
+Name[sr@ijekavianlatin]=Loše grupe
+Name[sr@latin]=Loše grupe
+Name[sv]=Felaktiga grupper
+Name[uk]=Погані групи
+Name[x-test]=xxBad Groupsxx
+Name[zh_CN]=坏分组
+Type=Service
+# one value for every property definition in bad-groups-servicetype.desktop
+ThisIsOkay=10
+#empty
+=11
+#missing terminator
+MissingTerminator=12
+# empty and missing terminator
+=13
+# completely empty
+=14
+SomeOtherProperty=15
+# extra spaces in group name (should be okay)
+TrailingSpacesAreOkay=16
+#missing type
+MissingType=17
+InvalidType=18
+# ok again after invalid ones
+ThisIsOkayAgain=19
--- /dev/null
+[Desktop Entry]
+Type=ServiceType
+
+[PropertyDef::ThisIsOkay]
+Type=int
+# missing name
+[PropertyDef::]
+Type=int
+# missing terminator
+[PropertyDef::MissingTerminator
+Type=int
+# empty and missing terminator
+[PropertyDef::
+Type=int
+# completely empty group
+[
+Type=int
+# completely empty group
+[DoesNotStartWithPropertyDef::SomeOtherProperty]
+Type=int
+# extra spaces
+[PropertyDef::TrailingSpacesAreOkay ]
+Type=int
+
+# missing Type=key
+[PropertyDef::MissingType]
+NoType=int
+
+# invalid Type=key
+[PropertyDef::InvalidType]
+Type=integer
+
+[PropertyDef::ThisIsOkayAgain]
+Type=int
--- /dev/null
+[Desktop Entry]
+Type=ServiceType
+
+[PropertyDef::X-Test-Bool]
+Type=bool
+
--- /dev/null
+[Desktop Entry]
+Name=Example
+Name[ca]=Exemple
+Name[ca@valencia]=Exemple
+Name[da]=Eksempel
+Name[de]=Beispiel
+Name[el]=Παράδειγμα
+Name[en_GB]=Example
+Name[es]=Ejemplo
+Name[fi]=Esimerkki
+Name[gl]=Exemplo
+Name[it]=Esempio
+Name[ko]=예제
+Name[nb]=Eksempel
+Name[nl]=Voorbeeld
+Name[pl]=Przykład
+Name[pt]=Exemplo
+Name[pt_BR]=Exemplo
+Name[sk]=Príklad
+Name[sl]=Primer
+Name[sr]=Пример
+Name[sr@ijekavian]=Пример
+Name[sr@ijekavianlatin]=Primer
+Name[sr@latin]=Primer
+Name[sv]=Exempel
+Name[uk]=Приклад
+Name[x-test]=xxExamplexx
+Name[zh_CN]=例子
+Type=Service
+X-KDE-ServiceTypes=example/servicetype,bar/foo
+X-Test-Integer=42
+X-Test-Double=42.42
+X-Test-List=a,b,c,def
+X-Test-String=foobar
+X-Test-Bool=true
+# not defined -> string
+X-Test-Unknown=true
+# QSize not supported -> string
+X-Test-Size=10,20
--- /dev/null
+[Desktop Entry]
+Type=ServiceType
+X-KDE-ServiceType=example/servicetype
+
+[PropertyDef::X-Test-Integer]
+Type=int
+[PropertyDef::X-Test-Double]
+Type=double
+[PropertyDef::X-Test-Bool]
+Type=bool
+[PropertyDef::X-Test-List]
+Type=QStringList
+[PropertyDef::X-Test-String]
+Type=QString
+# this is not supported -> should not convert
+# was used by KDE4 plasma-applet.desktop but that is no longer the case
+[PropertyDef::X-Test-Size]
+Type=QSize
--- /dev/null
+[Desktop Entry]
+Type=ServiceType
+X-KDE-ServiceType=KDEDModule
+[PropertyDef::X-KDE-FactoryName]
+Type=QString
+[PropertyDef::X-KDE-Kded-autoload]
+Type=bool
+[PropertyDef::X-KDE-Kded-load-on-demand]
+Type=bool
--- /dev/null
+# this is a copy of kdevelopplugin.desktop as an example of a real service type definition
+
+[Desktop Entry]
+Type=ServiceType
+X-KDE-ServiceType=KDevelop/NonExistentPlugin
+X-KDE-Derived=KPluginInfo
+#Name=KDevelop Plugin
+
+# mandatory, versioning - prevent DLL hell
+[PropertyDef::X-KDevelop-Version]
+Type=int
+
+# optional, determines whether a plugin is loaded only after
+# a project is opened, or is a global plugin.
+# If it is not set, the plugin can only be loaded by the
+# user or via requesting one of its dependencies
+# allowed values: Global, Project
+[PropertyDef::X-KDevelop-Category]
+Type=QString
+
+# mandatory, GUI-Operation Mode, determines whether a plugin
+# can work without having a mainwindow/partcontroller
+# running
+# allowed values: GUI, NoGUI
+[PropertyDef::X-KDevelop-Mode]
+Type=QString
+
+# optional, Arguments to pass to the plugin
+[PropertyDef::X-KDevelop-Args]
+Type=QString
+
+# optional, Interfaces that a plugin implements
+# usually values start with org.kdevelop
+[PropertyDef::X-KDevelop-Interfaces]
+Type=QStringList
+
+# optional, interfaces that this plugin depends
+# on
+[PropertyDef::X-KDevelop-IRequired]
+Type=QStringList
+
+# optional, interfaces that this plugin can use,
+# but the plugin still works if the interfaces are
+# not available.
+[PropertyDef::X-KDevelop-IOptional]
+Type=QStringList
+
+# optional, mimetypes supported by a language plugin
+[PropertyDef::X-KDevelop-SupportedMimeTypes]
+Type=QStringList
+
+# optional, language supported by a language plugin
+[PropertyDef::X-KDevelop-Language]
+Type=QString
+
+# optional, defines whether the plugin can be disabled
+# by the user. Possible values are "AlwaysOn" and "UserSelectable".
+# If the property is missing then UserSelectable is assumed
+[PropertyDef::X-KDevelop-LoadMode]
+Type=QString
+
+# optional, list of filters for "projectfiles" for the project plugin
+# For example: Makefile,Makefile.* for Makefile's
+[PropertyDef::X-KDevelop-ProjectFilesFilter]
+Type=QStringList
+
+# optional, description for the projectfiles filter
+[PropertyDef::X-KDevelop-ProjectFilesFilterDescription]
+Type=QString
+
--- /dev/null
+[Desktop Entry]
+# Type must be ServiceType otherwise this file is invalid
+Type=Service
+
+# as this file is invalid check that this property is not converted
+[PropertyDef::ShouldNotBeConvertedToInt]
+Type=int
--- /dev/null
+{
+ "KPlugin": {
+ "Authors": [
+ {
+ "Name": "Aleix Pol"
+ }
+ ],
+ "Description": "Test stuff.",
+ "Icon": "kdevelop",
+ "License": "GPL",
+ "Name": "Test"
+ },
+ "X-Plasma-MainScript": "ui/main.qml",
+ "X-Purpose-PluginTypes": [ "Export" ]
+}
--- /dev/null
+[Desktop Entry]
+Name=Parse Test
+Comment=Two Steps Parsing Test
+Type=Service
+Icon=preferences-system-time
+MimeType=image/png;application/pdf;
+
+X-Test-List=first,second
+X-KDE-ServiceTypes=example/servicetype
+X-KDE-Library=fakeplugin
+X-KDE-FormFactors=mediacenter,desktop
+X-KDE-PluginInfo-Author=Sebastian Kügler
+X-KDE-PluginInfo-Email=sebas@kde.org
+X-KDE-PluginInfo-Name=fakeplugin
+X-KDE-PluginInfo-Version=1.0
+X-KDE-PluginInfo-Website=https://kde.org/
+X-KDE-PluginInfo-Category=Examples
+X-KDE-PluginInfo-License=LGPL
+X-KDE-PluginInfo-EnabledByDefault=true
--- /dev/null
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kcoreaddons_debug.h"
+#include <QDebug>
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QObject>
+#include <QProcess>
+#include <QTemporaryFile>
+#include <QTest>
+#include <kcoreaddons_export.h>
+
+namespace QTest
+{
+template<>
+inline char *toString(const QJsonValue &val)
+{
+ // simply reuse the QDebug representation
+ QString result;
+ QDebug(&result) << val;
+ return QTest::toString(result);
+}
+
+}
+
+class DesktopToJsonTest : public QObject
+{
+ Q_OBJECT
+
+private:
+ void compareJson(const QJsonObject &actual, const QJsonObject &expected)
+ {
+ for (auto it = actual.constBegin(); it != actual.constEnd(); ++it) {
+ if (expected.constFind(it.key()) == expected.constEnd()) {
+ qCritical() << "Result has key" << it.key() << "which is not expected!";
+ QFAIL("Invalid output");
+ }
+ if (it.value().isObject() && expected.value(it.key()).isObject()) {
+ compareJson(it.value().toObject(), expected.value(it.key()).toObject());
+ } else {
+ QCOMPARE(it.value(), expected.value(it.key()));
+ }
+ }
+ for (auto it = expected.constBegin(); it != expected.constEnd(); ++it) {
+ if (actual.constFind(it.key()) == actual.constEnd()) {
+ qCritical() << "Result is missing key" << it.key();
+ QFAIL("Invalid output");
+ }
+ if (it.value().isObject() && actual.value(it.key()).isObject()) {
+ compareJson(it.value().toObject(), actual.value(it.key()).toObject());
+ } else {
+ QCOMPARE(it.value(), actual.value(it.key()));
+ }
+ }
+ }
+
+private Q_SLOTS:
+
+ void testDesktopToJson_data()
+ {
+ QTest::addColumn<QByteArray>("input");
+ QTest::addColumn<QJsonObject>("expectedResult");
+ QTest::addColumn<bool>("compatibilityMode");
+ QTest::addColumn<QStringList>("serviceTypes");
+
+ QJsonObject expectedResult;
+ QJsonObject kpluginObj;
+ QByteArray input =
+ // include an insignificant group
+ "[Some Group]\n"
+ "Foo=Bar\n"
+ "\n"
+ "[Desktop Entry]\n"
+ // only data inside [Desktop Entry] should be included
+ "Name=Example\n"
+ // empty lines
+ "\n"
+ " \n"
+ // make sure translations are included:
+ "Name[de_DE]=Beispiel\n"
+ // ignore comments:
+ "#Comment=Comment\n"
+ " #Comment=Comment\n"
+ "Categories=foo;bar;a\\;b\n"
+ // As the case is significant, the keys Name and NAME are not equivalent:
+ "CaseSensitive=ABC\n"
+ "CASESENSITIVE=abc\n"
+ // Space before and after the equals sign should be ignored:
+ "SpacesBeforeEq =foo\n"
+ "SpacesAfterEq= foo\n"
+ // Space before and after the equals sign should be ignored; the = sign is the actual delimiter.
+ // TODO: error in spec (spaces before and after the key??)
+ " SpacesBeforeKey=foo\n"
+ "SpacesAfterKey =foo\n"
+ // ignore trailing spaces
+ "TrailingSpaces=foo \n"
+ // However spaces in the value are significant:
+ "SpacesInValue=Hello, World!\n"
+ // The escape sequences \s, \n, \t, \r, and \\ are supported for values of
+ // type string and localestring, meaning ASCII space, newline, tab,
+ // carriage return, and backslash, respectively:
+ "EscapeSequences=So\\sme esc\\nap\\te se\\\\qu\\re\\\\nces\n" // make sure that the last n is a literal n not a newline!
+ // the standard keys that are used by plugins, make sure correct types are used:
+ "X-KDE-PluginInfo-Category=Examples\n" // string key
+ "X-KDE-PluginInfo-Version=1.0\n"
+ // The multiple values should be separated by a semicolon and the value of the key
+ // may be optionally terminated by a semicolon. Trailing empty strings must always
+ // be terminated with a semicolon. Semicolons in these values need to be escaped using \;.
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 79)
+ "X-KDE-PluginInfo-Depends=foo,bar,esc\\,aped\n" // string list key
+#endif
+ "X-KDE-ServiceTypes=\n" // empty string list
+ "X-KDE-PluginInfo-EnabledByDefault=true\n" // bool key
+ // now start a new group
+ "[New Group]\n"
+ "InWrongGroup=true\n";
+
+ expectedResult[QStringLiteral("Categories")] = QStringLiteral("foo;bar;a\\;b");
+ expectedResult[QStringLiteral("CaseSensitive")] = QStringLiteral("ABC");
+ expectedResult[QStringLiteral("CASESENSITIVE")] = QStringLiteral("abc");
+ expectedResult[QStringLiteral("SpacesBeforeEq")] = QStringLiteral("foo");
+ expectedResult[QStringLiteral("SpacesAfterEq")] = QStringLiteral("foo");
+ expectedResult[QStringLiteral("SpacesBeforeKey")] = QStringLiteral("foo");
+ expectedResult[QStringLiteral("SpacesAfterKey")] = QStringLiteral("foo");
+ expectedResult[QStringLiteral("TrailingSpaces")] = QStringLiteral("foo");
+ expectedResult[QStringLiteral("SpacesInValue")] = QStringLiteral("Hello, World!");
+ expectedResult[QStringLiteral("EscapeSequences")] = QStringLiteral("So me esc\nap\te se\\qu\re\\nces");
+ kpluginObj[QStringLiteral("Name")] = QStringLiteral("Example");
+ kpluginObj[QStringLiteral("Name[de_DE]")] = QStringLiteral("Beispiel");
+ kpluginObj[QStringLiteral("Category")] = QStringLiteral("Examples");
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 79)
+ kpluginObj[QStringLiteral("Dependencies")] =
+ QJsonArray::fromStringList(QStringList() << QStringLiteral("foo") << QStringLiteral("bar") << QStringLiteral("esc,aped"));
+#endif
+ kpluginObj[QStringLiteral("ServiceTypes")] = QJsonArray::fromStringList(QStringList());
+ kpluginObj[QStringLiteral("EnabledByDefault")] = true;
+ kpluginObj[QStringLiteral("Version")] = QStringLiteral("1.0");
+ QJsonObject compatResult = expectedResult;
+ compatResult[QStringLiteral("Name")] = QStringLiteral("Example");
+ compatResult[QStringLiteral("Name[de_DE]")] = QStringLiteral("Beispiel");
+ compatResult[QStringLiteral("X-KDE-PluginInfo-Category")] = QStringLiteral("Examples");
+ compatResult[QStringLiteral("X-KDE-PluginInfo-Version")] = QStringLiteral("1.0");
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 79)
+ compatResult[QStringLiteral("X-KDE-PluginInfo-Depends")] =
+ QJsonArray::fromStringList(QStringList() << QStringLiteral("foo") << QStringLiteral("bar") << QStringLiteral("esc,aped"));
+#endif
+ compatResult[QStringLiteral("X-KDE-ServiceTypes")] = QJsonArray::fromStringList(QStringList());
+ compatResult[QStringLiteral("X-KDE-PluginInfo-EnabledByDefault")] = true;
+
+ expectedResult[QStringLiteral("KPlugin")] = kpluginObj;
+
+ QTest::newRow("newFormat") << input << expectedResult << false << QStringList();
+ QTest::newRow("compatFormat") << input << compatResult << true << QStringList();
+
+ // test conversion of a currently existing .desktop file (excluding most of the translations):
+ QByteArray kdevInput =
+ "[Desktop Entry]\n"
+ "Type = Service\n"
+ "Icon=text-x-c++src\n"
+ "Exec=blubb\n"
+ "Comment=C/C++ Language Support\n"
+ "Comment[fr]=Prise en charge du langage C/C++\n"
+ "Comment[it]=Supporto al linguaggio C/C++\n"
+ "Name=C++ Support\n"
+ "Name[fi]=C++-tuki\n"
+ "Name[fr]=Prise en charge du C++\n"
+ "GenericName=Language Support\n"
+ "GenericName[sl]=Podpora jeziku\n"
+ "ServiceTypes=KDevelop/NonExistentPlugin\n"
+ "X-KDE-Library=kdevcpplanguagesupport\n"
+ "X-KDE-PluginInfo-Name=kdevcppsupport\n"
+ "X-KDE-PluginInfo-Category=Language Support\n"
+ "X-KDevelop-Version=1\n"
+ "X-KDevelop-Language=C++\n"
+ "X-KDevelop-Args=CPP\n"
+ "X-KDevelop-Interfaces=ILanguageSupport\n"
+ "X-KDevelop-SupportedMimeTypes=text/x-chdr,text/x-c++hdr,text/x-csrc,text/x-c++src\n"
+ "X-KDevelop-Mode=NoGUI\n"
+ "X-KDevelop-LoadMode=AlwaysOn";
+
+ QJsonParseError e;
+ QJsonObject kdevExpected = QJsonDocument::fromJson(
+ "{\n"
+ " \"GenericName\": \"Language Support\",\n"
+ " \"GenericName[sl]\": \"Podpora jeziku\",\n"
+ " \"KPlugin\": {\n"
+ " \"Category\": \"Language Support\",\n"
+ " \"Description\": \"C/C++ Language Support\",\n"
+ " \"Description[fr]\": \"Prise en charge du langage C/C++\",\n"
+ " \"Description[it]\": \"Supporto al linguaggio C/C++\",\n"
+ " \"Icon\": \"text-x-c++src\",\n"
+ " \"Id\": \"kdevcppsupport\",\n"
+ " \"Name\": \"C++ Support\",\n"
+ " \"Name[fi]\": \"C++-tuki\",\n"
+ " \"Name[fr]\": \"Prise en charge du C++\",\n"
+ " \"ServiceTypes\": [ \"KDevelop/NonExistentPlugin\" ]\n"
+ " },\n"
+ " \"X-KDevelop-Args\": \"CPP\",\n"
+ " \"X-KDevelop-Interfaces\": \"ILanguageSupport\",\n"
+ " \"X-KDevelop-Language\": \"C++\",\n"
+ " \"X-KDevelop-LoadMode\": \"AlwaysOn\",\n"
+ " \"X-KDevelop-Mode\": \"NoGUI\",\n"
+ " \"X-KDevelop-SupportedMimeTypes\": \"text/x-chdr,text/x-c++hdr,text/x-csrc,text/x-c++src\",\n"
+ " \"X-KDevelop-Version\": \"1\"\n"
+ "}\n",
+ &e)
+ .object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ QTest::newRow("kdevcpplanguagesupport no servicetype") << kdevInput << kdevExpected << false << QStringList();
+
+ QJsonObject kdevExpectedWithServiceType =
+ QJsonDocument::fromJson(
+ "{\n"
+ " \"GenericName\": \"Language Support\",\n"
+ " \"GenericName[sl]\": \"Podpora jeziku\",\n"
+ " \"KPlugin\": {\n"
+ " \"Category\": \"Language Support\",\n"
+ " \"Description\": \"C/C++ Language Support\",\n"
+ " \"Description[fr]\": \"Prise en charge du langage C/C++\",\n"
+ " \"Description[it]\": \"Supporto al linguaggio C/C++\",\n"
+ " \"Icon\": \"text-x-c++src\",\n"
+ " \"Id\": \"kdevcppsupport\",\n"
+ " \"Name\": \"C++ Support\",\n"
+ " \"Name[fi]\": \"C++-tuki\",\n"
+ " \"Name[fr]\": \"Prise en charge du C++\",\n"
+ " \"ServiceTypes\": [ \"KDevelop/NonExistentPlugin\" ]\n"
+ " },\n"
+ " \"X-KDevelop-Args\": \"CPP\",\n"
+ " \"X-KDevelop-Interfaces\": [\"ILanguageSupport\"],\n"
+ " \"X-KDevelop-Language\": \"C++\",\n"
+ " \"X-KDevelop-LoadMode\": \"AlwaysOn\",\n"
+ " \"X-KDevelop-Mode\": \"NoGUI\",\n"
+ " \"X-KDevelop-SupportedMimeTypes\": [\"text/x-chdr\", \"text/x-c++hdr\", \"text/x-csrc\", \"text/x-c++src\"],\n"
+ " \"X-KDevelop-Version\": 1\n"
+ "}\n",
+ &e)
+ .object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ const QString kdevServiceTypePath = QFINDTESTDATA("data/servicetypes/fake-kdevelopplugin.desktop");
+ QVERIFY(!kdevServiceTypePath.isEmpty());
+ QTest::newRow("kdevcpplanguagesupport with servicetype") << kdevInput << kdevExpectedWithServiceType << false << QStringList(kdevServiceTypePath);
+ // test conversion of the X-KDE-PluginInfo-Author + X-KDE-PluginInfo-Email key:
+ QByteArray authorInput =
+ "[Desktop Entry]\n"
+ "Type=Service\n"
+ "X-KDE-PluginInfo-Author=Foo Bar\n"
+ "X-KDE-PluginInfo-Email=foo.bar@baz.com\n";
+
+ QJsonObject authorsExpected = QJsonDocument::fromJson(
+ "{\n"
+ " \"KPlugin\": {\n"
+ " \"Authors\": [ { \"Name\": \"Foo Bar\", \"Email\": \"foo.bar@baz.com\" } ]\n"
+ " }\n }\n",
+ &e)
+ .object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ QTest::newRow("authors") << authorInput << authorsExpected << false << QStringList();
+
+ // test case-insensitive conversion of boolean keys
+ const QString boolServiceType = QFINDTESTDATA("data/servicetypes/bool-servicetype.desktop");
+ QVERIFY(!boolServiceType.isEmpty());
+
+ QByteArray boolInput1 = "[Desktop Entry]\nType=Service\nX-Test-Bool=true\n";
+ QByteArray boolInput2 = "[Desktop Entry]\nType=Service\nX-Test-Bool=TRue\n";
+ QByteArray boolInput3 = "[Desktop Entry]\nType=Service\nX-Test-Bool=false\n";
+ QByteArray boolInput4 = "[Desktop Entry]\nType=Service\nX-Test-Bool=FALse\n";
+
+ auto boolResultTrue = QJsonDocument::fromJson("{\"KPlugin\":{},\"X-Test-Bool\": true}", &e).object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ auto boolResultFalse = QJsonDocument::fromJson("{\"KPlugin\":{},\"X-Test-Bool\": false}", &e).object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ QTest::newRow("bool true") << boolInput1 << boolResultTrue << false << QStringList(boolServiceType);
+ QTest::newRow("bool TRue") << boolInput2 << boolResultTrue << false << QStringList(boolServiceType);
+ QTest::newRow("bool false") << boolInput3 << boolResultFalse << false << QStringList(boolServiceType);
+ QTest::newRow("bool FALse") << boolInput4 << boolResultFalse << false << QStringList(boolServiceType);
+
+ // test conversion of kcookiejar.desktop (for some reason the wrong boolean values were committed)
+ QByteArray kcookiejarInput =
+ "[Desktop Entry]\n"
+ "Type= Service\n"
+ "Name=Cookie Jar\n"
+ "Comment=Stores network cookies\n"
+ "X-KDE-ServiceTypes=KDEDModule\n"
+ "X-KDE-Library=kf5/kded/kcookiejar\n"
+ "X-KDE-Kded-autoload=false\n"
+ "X-KDE-Kded-load-on-demand=true\n";
+ auto kcookiejarResult = QJsonDocument::fromJson(
+ "{\n"
+ " \"KPlugin\": {\n"
+ " \"Description\": \"Stores network cookies\",\n"
+ " \"Name\": \"Cookie Jar\",\n"
+ " \"ServiceTypes\": [\n"
+ " \"KDEDModule\"\n"
+ " ]\n"
+ " },\n"
+ "\"X-KDE-Kded-autoload\": false,\n"
+ "\"X-KDE-Kded-load-on-demand\": true\n"
+ "}\n",
+ &e)
+ .object();
+ const QString kdedmoduleServiceType = QFINDTESTDATA("data/servicetypes/fake-kdedmodule.desktop");
+ QVERIFY(!kdedmoduleServiceType.isEmpty());
+ QTest::newRow("kcookiejar") << kcookiejarInput << kcookiejarResult << false << QStringList(kdedmoduleServiceType);
+ }
+
+ void testDesktopToJson()
+ {
+ QTemporaryFile output;
+ QTemporaryFile inputFile;
+ QVERIFY(inputFile.open());
+ QVERIFY(output.open()); // create the file
+ QFETCH(QByteArray, input);
+ QFETCH(QJsonObject, expectedResult);
+ QFETCH(bool, compatibilityMode);
+ QFETCH(QStringList, serviceTypes);
+ output.close();
+ inputFile.write(input);
+ inputFile.flush();
+ inputFile.close();
+
+ QProcess proc;
+ proc.setProgram(QStringLiteral(DESKTOP_TO_JSON_EXE));
+ QStringList arguments = QStringList() << QStringLiteral("-i") << inputFile.fileName() << QStringLiteral("-o") << output.fileName();
+ if (compatibilityMode) {
+ arguments << QStringLiteral("-c");
+ }
+ for (const QString &s : qAsConst(serviceTypes)) {
+ arguments << QStringLiteral("-s") << s;
+ }
+ proc.setArguments(arguments);
+ proc.start();
+ QVERIFY(proc.waitForFinished(10000));
+ QByteArray errorOut = proc.readAllStandardError();
+ if (!errorOut.isEmpty()) {
+ qCWarning(KCOREADDONS_DEBUG).nospace() << "desktoptojson STDERR:\n\n" << errorOut.constData() << "\n";
+ }
+ QCOMPARE(proc.exitCode(), 0);
+ QVERIFY(output.open());
+ QByteArray jsonString = output.readAll();
+ QJsonParseError e;
+ QJsonDocument doc = QJsonDocument::fromJson(jsonString, &e);
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ QJsonObject result = doc.object();
+ compareJson(result, expectedResult);
+ QVERIFY(!QTest::currentTestFailed());
+ }
+};
+
+QTEST_MAIN(DesktopToJsonTest)
+
+#include "desktoptojsontest.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#include "jsonplugin.h"
+#include <kpluginfactory.h>
+
+JsonPlugin::JsonPlugin(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ Q_UNUSED(args)
+}
+
+K_PLUGIN_FACTORY_WITH_JSON(jsonpluginfa, "jsonplugin.json", registerPlugin<JsonPlugin>();)
+
+#include "jsonplugin.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#ifndef JSONPLUGIN_H
+#define JSONPLUGIN_H
+
+#include <QObject>
+
+class JsonPlugin : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit JsonPlugin(QObject *parent, const QVariantList &args);
+};
+
+#endif // JSONPLUGIN_H
--- /dev/null
+{
+ "KPlugin": {
+ "Description": "This is a plugin",
+ "Description[nl]": "Dit is een plug-in",
+ "Description[pt]": "Isto é um 'plugin'",
+ "Description[pt_BR]": "Isto é um plugin",
+ "Description[sv]": "Det här är ett insticksprogram",
+ "Description[uk]": "Це додаток",
+ "Description[x-test]": "xxThis is a pluginxx",
+ "MimeTypes": [ "text/plain", "image/png" ]
+ }
+}
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#include "jsonplugin2.h"
+#include <kpluginfactory.h>
+
+JsonPlugin2::JsonPlugin2(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ Q_UNUSED(args)
+}
+
+K_PLUGIN_FACTORY_WITH_JSON(jsonplugin2, "jsonplugin2.json", registerPlugin<JsonPlugin2>();)
+
+#include "jsonplugin2.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#ifndef JSONPLUGIN2_H
+#define JSONPLUGIN2_H
+
+#include <QObject>
+
+class JsonPlugin2 : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit JsonPlugin2(QObject *parent, const QVariantList &args);
+};
+
+#endif // JSONPLUGIN_H
--- /dev/null
+{
+ "KPlugin": {
+ "Description": "This is another plugin",
+ "Description[nl]": "Dit is een andere plug-in",
+ "Description[pt]": "Este é outro 'plugin'",
+ "Description[pt_BR]": "Isto é outro plugin",
+ "Description[sv]": "Det här är ännu ett insticksprogram",
+ "Description[uk]": "Це інший додаток",
+ "Description[x-test]": "xxThis is another pluginxx",
+ "Id": "foobar",
+ "MimeTypes": [ "text/html" ]
+ }
+}
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2016 Friedrich W. H. Kossebau <kossebau@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+// test object
+#include <kaboutdata.h>
+// Qt
+#include <QObject>
+#include <QTest>
+
+// Separate test for reading & setting applicationData
+// to ensure a separate process where no other test case has
+// directly or indirectly called KAboutData::setApplicationData before
+// and thus created the global KAboutData object
+class KAboutDataApplicationDataTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testInteractionWithQApplicationData();
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 76)
+ void testRegisterPluginData();
+#endif
+};
+
+static const char AppName[] = "app";
+static const char ProgramName[] = "ProgramName";
+static const char Version[] = "Version";
+static const char OrganizationDomain[] = "no.where";
+static const char DesktopFileName[] = "org.kde.someapp";
+
+static const char AppName2[] = "otherapp";
+static const char ProgramName2[] = "OtherProgramName";
+static const char Version2[] = "OtherVersion";
+static const char OrganizationDomain2[] = "other.no.where";
+static const char DesktopFileName2[] = "org.kde.otherapp";
+
+void KAboutDataApplicationDataTest::testInteractionWithQApplicationData()
+{
+ // init the app metadata the Qt way
+ QCoreApplication *app = QCoreApplication::instance();
+ app->setApplicationName(QLatin1String(AppName));
+ app->setProperty("applicationDisplayName", QLatin1String(ProgramName));
+ app->setApplicationVersion(QLatin1String(Version));
+ app->setOrganizationDomain(QLatin1String(OrganizationDomain));
+ app->setProperty("desktopFileName", QLatin1String(DesktopFileName));
+
+ // without setting before, get KAboutData::applicationData
+ const KAboutData applicationAboutData = KAboutData::applicationData();
+
+ // should be initialized with Q*Application metadata
+ QCOMPARE(applicationAboutData.componentName(), QLatin1String(AppName));
+ QCOMPARE(applicationAboutData.displayName(), QLatin1String(ProgramName));
+ QCOMPARE(applicationAboutData.organizationDomain(), QLatin1String(OrganizationDomain));
+ QCOMPARE(applicationAboutData.version(), QLatin1String(Version));
+ QCOMPARE(applicationAboutData.desktopFileName(), QLatin1String(DesktopFileName));
+
+ // now set some new KAboutData, with different values
+ KAboutData aboutData2(QString::fromLatin1(AppName2), QString::fromLatin1(ProgramName2), QString::fromLatin1(Version2));
+ aboutData2.setOrganizationDomain(OrganizationDomain2);
+ aboutData2.setDesktopFileName(QLatin1String(DesktopFileName2));
+
+ KAboutData::setApplicationData(aboutData2);
+
+ // check that Q*Application metadata has been updated, as expected per API definition
+ QCOMPARE(app->applicationName(), QLatin1String(AppName2));
+ QCOMPARE(app->property("applicationDisplayName").toString(), QLatin1String(ProgramName2));
+ QCOMPARE(app->organizationDomain(), QLatin1String(OrganizationDomain2));
+ QCOMPARE(app->applicationVersion(), QLatin1String(Version2));
+ QCOMPARE(app->property("desktopFileName").toString(), QLatin1String(DesktopFileName2));
+
+ // and check as well KAboutData::applicationData itself
+ const KAboutData applicationAboutData2 = KAboutData::applicationData();
+
+ QCOMPARE(applicationAboutData2.componentName(), QLatin1String(AppName2));
+ QCOMPARE(applicationAboutData2.displayName(), QLatin1String(ProgramName2));
+ QCOMPARE(applicationAboutData2.organizationDomain(), QLatin1String(OrganizationDomain2));
+ QCOMPARE(applicationAboutData2.version(), QLatin1String(Version2));
+ QCOMPARE(applicationAboutData2.desktopFileName(), QLatin1String(DesktopFileName2));
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 76)
+void KAboutDataApplicationDataTest::testRegisterPluginData()
+{
+ for (const auto &name : {QStringLiteral("foo"), QStringLiteral("bar")}) {
+ QVERIFY(!KAboutData::pluginData(name));
+ KAboutData::registerPluginData(KAboutData(name));
+
+ auto v1 = KAboutData::pluginData(name);
+ QVERIFY(v1);
+ QCOMPARE(v1->componentName(), name);
+
+ // re-registering will overwrite and not trigger memory leaks (check LSAN)
+ KAboutData::registerPluginData(KAboutData(name));
+
+ // the pointer staid the same, as QHash is node based
+ QCOMPARE(KAboutData::pluginData(name), v1);
+ }
+}
+#endif
+
+QTEST_MAIN(KAboutDataApplicationDataTest)
+
+#include "kaboutdataapplicationdatatest.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2008 Friedrich W. H. Kossebau <kossebau@kde.org>
+ SPDX-FileCopyrightText: 2017 Harald Sitter <sitter@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+// test object
+#include <kaboutdata.h>
+// Qt
+#include <QFile>
+#include <QLatin1String>
+#include <QObject>
+#include <QTest>
+#include <QTextStream>
+#ifndef Q_OS_WIN
+void initLocale()
+{
+ qputenv("LC_ALL", "en_US.utf-8");
+}
+
+Q_CONSTRUCTOR_FUNCTION(initLocale)
+#endif
+
+class KAboutDataTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testLongFormConstructorWithDefaults();
+ void testLongFormConstructor();
+ void testShortFormConstructor();
+ void testSetAddLicense();
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 2)
+ void testSetProgramIconName();
+#endif
+ void testSetDesktopFileName();
+ void testCopying();
+
+ void testKAboutDataOrganizationDomain();
+
+ void testLicenseSPDXID();
+ void testLicenseOrLater();
+
+ void testProductName();
+};
+
+static const char AppName[] = "app";
+static const char ProgramName[] = "ProgramName";
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 2)
+static const char ProgramIconName[] = "program-icon";
+#endif
+static const char Version[] = "Version";
+static const char ShortDescription[] = "ShortDescription";
+static const char CopyrightStatement[] = "CopyrightStatement";
+static const char Text[] = "Text";
+static const char HomePageAddress[] = "http://test.no.where/";
+static const char HomePageSecure[] = "https://test.no.where/";
+static const char OrganizationDomain[] = "no.where";
+static const char BugsEmailAddress[] = "bugs@no.else";
+static const char LicenseText[] = "free to write, reading forbidden";
+static const char LicenseFileName[] = "testlicensefile";
+static const char LicenseFileText[] = "free to write, reading forbidden, in the file";
+
+void KAboutDataTest::testLongFormConstructorWithDefaults()
+{
+ KAboutData aboutData(QString::fromLatin1(AppName),
+ QLatin1String(ProgramName),
+ QString::fromLatin1(Version),
+ QLatin1String(ShortDescription),
+ KAboutLicense::Unknown);
+
+ QCOMPARE(aboutData.componentName(), QString::fromLatin1(AppName));
+ QCOMPARE(aboutData.productName(), QString::fromLatin1(AppName));
+ QCOMPARE(aboutData.displayName(), QLatin1String(ProgramName));
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 2)
+ QCOMPARE(aboutData.programIconName(), QString::fromLatin1(AppName));
+#endif
+ QCOMPARE(aboutData.programLogo(), QVariant());
+ QCOMPARE(aboutData.organizationDomain(), QString::fromLatin1("kde.org"));
+ QCOMPARE(aboutData.version(), QString::fromLatin1(Version));
+ QCOMPARE(aboutData.homepage(), QString());
+ QCOMPARE(aboutData.bugAddress(), QString::fromLatin1("submit@bugs.kde.org"));
+ QVERIFY(aboutData.authors().isEmpty());
+ QVERIFY(aboutData.credits().isEmpty());
+ QVERIFY(aboutData.translators().isEmpty());
+ QCOMPARE(aboutData.otherText(), QString());
+ QCOMPARE(aboutData.licenses().count(), 1);
+ // We don't know the default text, do we?
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::ShortName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::FullName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::FullName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+ QCOMPARE(aboutData.copyrightStatement(), QString());
+ QCOMPARE(aboutData.shortDescription(), (QLatin1String(ShortDescription)));
+ QCOMPARE(aboutData.customAuthorPlainText(), QString());
+ QCOMPARE(aboutData.customAuthorRichText(), QString());
+ QVERIFY(!aboutData.customAuthorTextEnabled());
+ QCOMPARE(aboutData.desktopFileName(), QStringLiteral("org.kde.app"));
+
+ QCOMPARE(aboutData.internalVersion(), Version);
+ QCOMPARE(aboutData.internalProgramName(), ProgramName);
+ QCOMPARE(aboutData.internalBugAddress(), "submit@bugs.kde.org");
+ QCOMPARE(aboutData.internalProductName(), nullptr);
+}
+
+void KAboutDataTest::testLongFormConstructor()
+{
+ KAboutData aboutData(QString::fromLatin1(AppName),
+ QLatin1String(ProgramName),
+ QString::fromLatin1(Version),
+ QLatin1String(ShortDescription),
+ KAboutLicense::Unknown,
+ QLatin1String(CopyrightStatement),
+ QLatin1String(Text),
+ QString::fromLatin1(HomePageAddress),
+ QString::fromLatin1(BugsEmailAddress));
+
+ QCOMPARE(aboutData.componentName(), QLatin1String(AppName));
+ QCOMPARE(aboutData.productName(), QLatin1String(AppName));
+ QCOMPARE(aboutData.displayName(), QLatin1String(ProgramName));
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 2)
+ QCOMPARE(aboutData.programIconName(), QLatin1String(AppName));
+#endif
+ QCOMPARE(aboutData.programLogo(), QVariant());
+ QCOMPARE(aboutData.organizationDomain(), QString::fromLatin1(OrganizationDomain));
+ QCOMPARE(aboutData.version(), QString::fromLatin1(Version));
+ QCOMPARE(aboutData.homepage(), QString::fromLatin1(HomePageAddress));
+ QCOMPARE(aboutData.bugAddress(), QString::fromLatin1(BugsEmailAddress));
+ QVERIFY(aboutData.authors().isEmpty());
+ QVERIFY(aboutData.credits().isEmpty());
+ QVERIFY(aboutData.translators().isEmpty());
+ QCOMPARE(aboutData.otherText(), QLatin1String(Text));
+ QCOMPARE(aboutData.licenses().count(), 1);
+ // We don't know the default text, do we?
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::ShortName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::FullName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::FullName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+ QCOMPARE(aboutData.copyrightStatement(), QLatin1String(CopyrightStatement));
+ QCOMPARE(aboutData.shortDescription(), QLatin1String(ShortDescription));
+ QCOMPARE(aboutData.customAuthorPlainText(), QString());
+ QCOMPARE(aboutData.customAuthorRichText(), QString());
+ QVERIFY(!aboutData.customAuthorTextEnabled());
+ QCOMPARE(aboutData.desktopFileName(), QStringLiteral("where.no.app"));
+
+ QCOMPARE(aboutData.internalVersion(), Version);
+ QCOMPARE(aboutData.internalProgramName(), ProgramName);
+ QCOMPARE(aboutData.internalBugAddress(), BugsEmailAddress);
+ QCOMPARE(aboutData.internalProductName(), nullptr);
+
+ // We support http and https protocols on the homepage address, ensure they
+ // give the same org. domain and desktop file name.
+ KAboutData aboutDataSecure(QString::fromLatin1(AppName),
+ QLatin1String(ProgramName),
+ QString::fromLatin1(Version),
+ QLatin1String(ShortDescription),
+ KAboutLicense::Unknown,
+ QLatin1String(CopyrightStatement),
+ QLatin1String(Text),
+ QString::fromLatin1(HomePageSecure),
+ QString::fromLatin1(BugsEmailAddress));
+ QCOMPARE(aboutDataSecure.componentName(), QLatin1String(AppName));
+ QCOMPARE(aboutDataSecure.productName(), QLatin1String(AppName));
+ QCOMPARE(aboutDataSecure.organizationDomain(), QString::fromLatin1(OrganizationDomain));
+ QCOMPARE(aboutDataSecure.desktopFileName(), QStringLiteral("where.no.app"));
+}
+
+void KAboutDataTest::testShortFormConstructor()
+{
+ KAboutData aboutData(QString::fromLatin1(AppName), QLatin1String(ProgramName), QString::fromLatin1(Version));
+
+ QCOMPARE(aboutData.componentName(), QString::fromLatin1(AppName));
+ QCOMPARE(aboutData.productName(), QString::fromLatin1(AppName));
+ QCOMPARE(aboutData.displayName(), QLatin1String(ProgramName));
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 2)
+ QCOMPARE(aboutData.programIconName(), QString::fromLatin1(AppName));
+#endif
+ QCOMPARE(aboutData.programLogo(), QVariant());
+ QCOMPARE(aboutData.organizationDomain(), QString::fromLatin1("kde.org"));
+ QCOMPARE(aboutData.version(), QString::fromLatin1(Version));
+ QCOMPARE(aboutData.homepage(), QString());
+ QCOMPARE(aboutData.bugAddress(), QString::fromLatin1("submit@bugs.kde.org"));
+ QVERIFY(aboutData.authors().isEmpty());
+ QVERIFY(aboutData.credits().isEmpty());
+ QVERIFY(aboutData.translators().isEmpty());
+ QCOMPARE(aboutData.otherText(), QString());
+ QCOMPARE(aboutData.licenses().count(), 1);
+ // We don't know the default text, do we?
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::ShortName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::FullName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::FullName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+ QCOMPARE(aboutData.copyrightStatement(), QString());
+ QCOMPARE(aboutData.shortDescription(), QString());
+ QCOMPARE(aboutData.customAuthorPlainText(), QString());
+ QCOMPARE(aboutData.customAuthorRichText(), QString());
+ QVERIFY(!aboutData.customAuthorTextEnabled());
+ QCOMPARE(aboutData.desktopFileName(), QStringLiteral("org.kde.app"));
+
+ QCOMPARE(aboutData.internalVersion(), Version);
+ QCOMPARE(aboutData.internalProgramName(), ProgramName);
+ QCOMPARE(aboutData.internalBugAddress(), "submit@bugs.kde.org");
+ QCOMPARE(aboutData.internalProductName(), nullptr);
+}
+
+void KAboutDataTest::testKAboutDataOrganizationDomain()
+{
+ KAboutData data(QString::fromLatin1("app"),
+ QLatin1String("program"),
+ QString::fromLatin1("version"),
+ QLatin1String("description"),
+ KAboutLicense::LGPL,
+ QLatin1String("copyright"),
+ QLatin1String("hello world"),
+ QStringLiteral("http://www.koffice.org"));
+ QCOMPARE(data.organizationDomain(), QString::fromLatin1("koffice.org"));
+ QCOMPARE(data.desktopFileName(), QStringLiteral("org.koffice.app"));
+
+ KAboutData data2(QString::fromLatin1("app"),
+ QLatin1String("program"),
+ QString::fromLatin1("version"),
+ QLatin1String("description"),
+ KAboutLicense::LGPL,
+ QString::fromLatin1("copyright"),
+ QLatin1String("hello world"),
+ QStringLiteral("app"));
+ QCOMPARE(data2.organizationDomain(), QString::fromLatin1("kde.org"));
+ QCOMPARE(data2.desktopFileName(), QStringLiteral("org.kde.app"));
+}
+
+void KAboutDataTest::testSetAddLicense()
+{
+ // prepare a file with a license text
+ QFile licenseFile(QString::fromLatin1(LicenseFileName));
+ licenseFile.open(QIODevice::WriteOnly);
+ QTextStream licenseFileStream(&licenseFile);
+ licenseFileStream << LicenseFileText;
+ licenseFile.close();
+
+ const QString copyrightStatement = QLatin1String(CopyrightStatement);
+ const QString lineFeed = QString::fromLatin1("\n\n");
+
+ KAboutData aboutData(QString::fromLatin1(AppName),
+ QLatin1String(ProgramName),
+ QString::fromLatin1(Version),
+ QLatin1String(ShortDescription),
+ KAboutLicense::Unknown,
+ QLatin1String(CopyrightStatement),
+ QLatin1String(Text),
+ QString::fromLatin1(HomePageAddress),
+ QString::fromLatin1(BugsEmailAddress));
+
+ // set to GPL2
+ aboutData.setLicense(KAboutLicense::GPL_V2);
+
+ QCOMPARE(aboutData.licenses().count(), 1);
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString::fromLatin1("GPL v2"));
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::FullName), QString::fromLatin1("GNU General Public License Version 2"));
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(GPL2Text) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+
+ // set to Unknown again
+ aboutData.setLicense(KAboutLicense::Unknown);
+
+ QCOMPARE(aboutData.licenses().count(), 1);
+ // We don't know the default text, do we?
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::ShortName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).name(KAboutLicense::FullName), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).name(KAboutLicense::FullName).isEmpty());
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(WarningText) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+
+ // add GPL3
+ aboutData.addLicense(KAboutLicense::GPL_V3);
+
+ QCOMPARE(aboutData.licenses().count(), 1);
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString::fromLatin1("GPL v3"));
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::FullName), QString::fromLatin1("GNU General Public License Version 3"));
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(GPL3Text) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+
+ // add GPL2, Custom and File
+ aboutData.addLicense(KAboutLicense::GPL_V2);
+ aboutData.addLicenseText(QLatin1String(LicenseText));
+ aboutData.addLicenseTextFile(QLatin1String(LicenseFileName));
+
+ QCOMPARE(aboutData.licenses().count(), 4);
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::ShortName), QString::fromLatin1("GPL v3"));
+ QCOMPARE(aboutData.licenses().at(0).name(KAboutLicense::FullName), QString::fromLatin1("GNU General Public License Version 3"));
+ // QCOMPARE( aboutData.licenses().at(0).text(), QString(GPL3Text) );
+ QVERIFY(!aboutData.licenses().at(0).text().isEmpty());
+ QCOMPARE(aboutData.licenses().at(1).name(KAboutLicense::ShortName), QString::fromLatin1("GPL v2"));
+ QCOMPARE(aboutData.licenses().at(1).name(KAboutLicense::FullName), QString::fromLatin1("GNU General Public License Version 2"));
+ // QCOMPARE( aboutData.licenses().at(1).text(), QString(GPL2Text) );
+ QVERIFY(!aboutData.licenses().at(1).text().isEmpty());
+ QCOMPARE(aboutData.licenses().at(2).name(KAboutLicense::ShortName), QString::fromLatin1("Custom"));
+ QCOMPARE(aboutData.licenses().at(2).name(KAboutLicense::FullName), QString::fromLatin1("Custom"));
+ QCOMPARE(aboutData.licenses().at(2).text(), QLatin1String(LicenseText));
+ QCOMPARE(aboutData.licenses().at(3).name(KAboutLicense::ShortName), QString::fromLatin1("Custom"));
+ QCOMPARE(aboutData.licenses().at(3).name(KAboutLicense::FullName), QString::fromLatin1("Custom"));
+ QCOMPARE(aboutData.licenses().at(3).text(), QString(copyrightStatement + lineFeed + QLatin1String(LicenseFileText)));
+}
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 2)
+void KAboutDataTest::testSetProgramIconName()
+{
+ const QString programIconName(QString::fromLatin1(ProgramIconName));
+
+ KAboutData aboutData(QString::fromLatin1(AppName),
+ QLatin1String(ProgramName),
+ QString::fromLatin1(Version),
+ QLatin1String(ShortDescription),
+ KAboutLicense::Unknown,
+ QLatin1String(CopyrightStatement),
+ QLatin1String(Text),
+ QString::fromLatin1(HomePageAddress),
+ QString::fromLatin1(BugsEmailAddress));
+
+ // Deprecated, still want to test this though. Silence GCC warnings.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ // set different iconname
+ aboutData.setProgramIconName(programIconName);
+#pragma GCC diagnostic pop
+ QCOMPARE(aboutData.programIconName(), programIconName);
+}
+#endif
+
+void KAboutDataTest::testCopying()
+{
+ KAboutData aboutData(QString::fromLatin1(AppName),
+ QLatin1String(ProgramName),
+ QString::fromLatin1(Version),
+ QLatin1String(ShortDescription),
+ KAboutLicense::GPL_V2);
+
+ {
+ KAboutData aboutData2(QString::fromLatin1(AppName),
+ QLatin1String(ProgramName),
+ QString::fromLatin1(Version),
+ QLatin1String(ShortDescription),
+ KAboutLicense::GPL_V3);
+ aboutData2.addLicense(KAboutLicense::GPL_V2, KAboutLicense::OrLaterVersions);
+ aboutData = aboutData2;
+ }
+ QList<KAboutLicense> licenses = aboutData.licenses();
+ QCOMPARE(licenses.count(), 2);
+ QCOMPARE(licenses.at(0).key(), KAboutLicense::GPL_V3);
+ QCOMPARE(aboutData.licenses().at(0).spdx(), QStringLiteral("GPL-3.0"));
+ // check it doesn't crash
+ QVERIFY(!licenses.at(0).text().isEmpty());
+ QCOMPARE(licenses.at(1).key(), KAboutLicense::GPL_V2);
+ QCOMPARE(aboutData.licenses().at(1).spdx(), QStringLiteral("GPL-2.0+"));
+ // check it doesn't crash
+ QVERIFY(!licenses.at(1).text().isEmpty());
+}
+
+void KAboutDataTest::testSetDesktopFileName()
+{
+ KAboutData aboutData(QString::fromLatin1(AppName),
+ QLatin1String(ProgramName),
+ QString::fromLatin1(Version),
+ QLatin1String(ShortDescription),
+ KAboutLicense::Unknown);
+ QCOMPARE(aboutData.desktopFileName(), QStringLiteral("org.kde.app"));
+
+ // set different desktopFileName
+ aboutData.setDesktopFileName(QStringLiteral("foo.bar.application"));
+ QCOMPARE(aboutData.desktopFileName(), QStringLiteral("foo.bar.application"));
+}
+
+void KAboutDataTest::testLicenseSPDXID()
+{
+ // Input with + should output with +.
+ auto license = KAboutLicense::byKeyword(QStringLiteral("GPLv2+"));
+ QCOMPARE(license.spdx(), QStringLiteral("GPL-2.0+"));
+ // Input without should output without.
+ license = KAboutLicense::byKeyword(QStringLiteral("GPLv2"));
+ QCOMPARE(license.spdx(), QStringLiteral("GPL-2.0"));
+
+ // we should be able to match by spdx too
+ // create a KAboutLicense from enum, then make sure going to spdx and back gives the same enum
+ for (int i = 1; i <= KAboutLicense::LGPL_V2_1; ++i) { /*current highest enum value*/
+ KAboutData aboutData(QString::fromLatin1(AppName),
+ QLatin1String(ProgramName),
+ QString::fromLatin1(Version),
+ QLatin1String(ShortDescription),
+ KAboutLicense::GPL_V2);
+ aboutData.setLicense(KAboutLicense::LicenseKey(i));
+ QVERIFY(aboutData.licenses().count() == 1);
+ const auto license = aboutData.licenses().constFirst();
+ auto licenseFromKeyword = KAboutLicense::byKeyword(license.spdx());
+
+ QCOMPARE(license.key(), licenseFromKeyword.key());
+ }
+}
+
+void KAboutDataTest::testLicenseOrLater()
+{
+ // For kaboutdata we can replace the license with an orLater version. Or add a second one.
+ KAboutData aboutData(QString::fromLatin1(AppName),
+ QLatin1String(ProgramName),
+ QString::fromLatin1(Version),
+ QLatin1String(ShortDescription),
+ KAboutLicense::GPL_V2);
+ QCOMPARE(aboutData.licenses().at(0).spdx(), QStringLiteral("GPL-2.0"));
+ aboutData.setLicense(KAboutLicense::GPL_V2, KAboutLicense::OrLaterVersions);
+ QCOMPARE(aboutData.licenses().at(0).spdx(), QStringLiteral("GPL-2.0+"));
+ aboutData.addLicense(KAboutLicense::LGPL_V3, KAboutLicense::OrLaterVersions);
+ bool foundLGPL = false;
+ const QList<KAboutLicense> licenses = aboutData.licenses();
+ for (const auto &license : licenses) {
+ if (license.key() == KAboutLicense::LGPL_V3) {
+ QCOMPARE(license.spdx(), QStringLiteral("LGPL-3.0+"));
+ foundLGPL = true;
+ break;
+ }
+ }
+ QCOMPARE(foundLGPL, true);
+}
+
+void KAboutDataTest::testProductName()
+{
+ KAboutData aboutData(QString::fromLatin1(AppName), QString::fromLatin1(ProgramName));
+ QCOMPARE(aboutData.productName(), QString::fromLatin1(AppName));
+ QCOMPARE(aboutData.internalProductName(), nullptr);
+ aboutData.setProductName("frameworks-kcoreaddons/aboutdata");
+ QCOMPARE(aboutData.productName(), QString::fromLatin1("frameworks-kcoreaddons/aboutdata"));
+ QCOMPARE(aboutData.internalProductName(), "frameworks-kcoreaddons/aboutdata");
+}
+
+QTEST_MAIN(KAboutDataTest)
+
+#include "kaboutdatatest.moc"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ SPDX-FileCopyrightText: 2006 Jacob R Rideout <kde@jacobrideout.net>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kautosavefiletest.h"
+
+#include <QFile>
+#include <QTextStream>
+#include <QtAlgorithms>
+
+#include <QTemporaryFile>
+#include <kautosavefile.h>
+
+#include <QTest>
+
+QTEST_MAIN(KAutoSaveFileTest)
+
+void KAutoSaveFileTest::initTestCase()
+{
+ QCoreApplication::instance()->setApplicationName(QLatin1String("qttest")); // TODO do this in qtestlib itself
+}
+
+void KAutoSaveFileTest::cleanupTestCase()
+{
+ for (const QString &fileToRemove : qAsConst(filesToRemove)) {
+ QFile::remove(fileToRemove);
+ }
+}
+
+void KAutoSaveFileTest::test_readWrite()
+{
+ QTemporaryFile file;
+
+ QVERIFY(file.open());
+
+ QUrl normalFile = QUrl::fromLocalFile(QFileInfo(file).absoluteFilePath());
+
+ // Test basic functionality
+ KAutoSaveFile saveFile(normalFile);
+
+ QVERIFY(!QFile::exists(saveFile.fileName()));
+ QVERIFY(saveFile.open(QIODevice::ReadWrite));
+
+ QString inText = QString::fromLatin1("This is test data one.\n");
+
+ {
+ QTextStream ts(&saveFile);
+ ts << inText;
+ ts.flush();
+ }
+
+ saveFile.close();
+
+ {
+ QFile testReader(saveFile.fileName());
+ testReader.open(QIODevice::ReadWrite);
+ QTextStream ts(&testReader);
+
+ QString outText = ts.readAll();
+
+ QCOMPARE(outText, inText);
+ }
+
+ filesToRemove << file.fileName();
+}
+
+void KAutoSaveFileTest::test_fileNameMaxLength()
+{
+ // In KAutoSaveFilePrivate::tempFile() the name of the kautosavefile that's going to be created
+ // is concatanated in the form:
+ // fileName + junk.truncated + protocol + _ + path.truncated + junk
+ // see tempFile() for details.
+ //
+ // Make sure that the generated filename (e.g. as you would get from QUrl::fileName()) doesn't
+ // exceed NAME_MAX (the maximum length allowed for filenames, see e.g. /usr/include/linux/limits.h)
+ // otherwise the file can't be opened.
+ //
+ // see https://phabricator.kde.org/D24489
+
+ QString s;
+ s.fill(QLatin1Char('b'), 80);
+ // create a long path that:
+ // - exceeds NAME_MAX (255)
+ // - is less than the maximum allowed path length, PATH_MAX (4096)
+ // see e.g. /usr/include/linux/limits.h
+ const QString path = QDir::tempPath() + QLatin1Char('/') + s + QLatin1Char('/') + s + QLatin1Char('/') + s + QLatin1Char('/') + s;
+
+ QFile file(path + QLatin1Char('/') + QLatin1String("testFile.txt"));
+
+ QUrl normalFile = QUrl::fromLocalFile(file.fileName());
+
+ KAutoSaveFile saveFile(normalFile);
+
+ QVERIFY(!QFile::exists(saveFile.fileName()));
+ QVERIFY(saveFile.open(QIODevice::ReadWrite));
+
+ filesToRemove << file.fileName();
+}
+
+void KAutoSaveFileTest::test_fileStaleFiles()
+{
+ QUrl normalFile = QUrl::fromLocalFile(QDir::temp().absoluteFilePath(QStringLiteral("test directory/tîst me.txt")));
+
+ KAutoSaveFile saveFile(normalFile);
+ QVERIFY(saveFile.open(QIODevice::ReadWrite));
+ saveFile.write("testdata");
+
+ // Make sure the stale file is found
+
+ const auto listOfStaleFiles = saveFile.staleFiles(normalFile, QStringLiteral("qttest"));
+ QVERIFY(listOfStaleFiles.count() == 1);
+ saveFile.releaseLock();
+ qDeleteAll(listOfStaleFiles);
+
+ // Make sure the stale file is deleted
+
+ QVERIFY(saveFile.staleFiles(normalFile, QStringLiteral("qttest")).isEmpty());
+}
+
+void KAutoSaveFileTest::test_applicationStaleFiles()
+{
+ // TODO
+}
+
+void KAutoSaveFileTest::test_locking()
+{
+ QUrl normalFile(QString::fromLatin1("fish://user@example.com/home/remote/test.txt"));
+
+ KAutoSaveFile saveFile(normalFile);
+
+ QVERIFY(!QFile::exists(saveFile.fileName()));
+ QVERIFY(saveFile.open(QIODevice::ReadWrite));
+
+ const QList<KAutoSaveFile *> staleFiles(KAutoSaveFile::staleFiles(normalFile));
+
+ QVERIFY(!staleFiles.isEmpty());
+
+ KAutoSaveFile *saveFile2 = staleFiles.at(0);
+
+ const QString fn = saveFile2->fileName();
+ // It looks like $XDG_DATA_HOME/stalefiles/qttest/test.txtXXXfish_%2Fhome%2FremoteXXXXXXX
+ QVERIFY2(fn.contains(QLatin1String("stalefiles/qttest/test.txt")), qPrintable(fn));
+ QVERIFY2(fn.contains(QLatin1String("fish_%2Fhome%2Fremote")), qPrintable(fn));
+
+ QVERIFY(QFile::exists(saveFile2->fileName()));
+ QVERIFY(!saveFile2->open(QIODevice::ReadWrite));
+
+ saveFile.releaseLock();
+
+ QVERIFY(saveFile2->open(QIODevice::ReadWrite));
+
+ qDeleteAll(staleFiles);
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ SPDX-FileCopyrightText: 2006 Jacob R Rideout <kde@jacobrideout.net>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef kautosavefiletest_h
+#define kautosavefiletest_h
+
+#include <QObject>
+#include <QStringList>
+
+class KAutoSaveFileTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void initTestCase();
+ void test_readWrite();
+ void test_fileNameMaxLength();
+ void test_fileStaleFiles();
+ void test_applicationStaleFiles();
+ void test_locking();
+ void cleanupTestCase();
+
+private:
+ QStringList filesToRemove;
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2013 Kevin Funk <kevin@kfunk.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kcompositejobtest.h"
+
+#include <QSignalSpy>
+#include <QTest>
+#include <QTimer>
+
+TestJob::TestJob(QObject *parent)
+ : KJob(parent)
+{
+}
+
+void TestJob::start()
+{
+ QTimer::singleShot(1000, this, &TestJob::doEmit);
+}
+
+void TestJob::doEmit()
+{
+ emitResult();
+}
+
+void CompositeJob::start()
+{
+ if (hasSubjobs()) {
+ subjobs().first()->start();
+ } else {
+ emitResult();
+ }
+}
+
+bool CompositeJob::addSubjob(KJob *job)
+{
+ return KCompositeJob::addSubjob(job);
+}
+
+void CompositeJob::slotResult(KJob *job)
+{
+ KCompositeJob::slotResult(job);
+
+ if (!error() && hasSubjobs()) {
+ // start next
+ subjobs().first()->start();
+ } else {
+ setError(job->error());
+ setErrorText(job->errorText());
+ emitResult();
+ }
+}
+
+KCompositeJobTest::KCompositeJobTest()
+ : loop(this)
+{
+}
+
+/**
+ * In case a composite job is deleted during execution
+ * we still want to assure that we don't crash
+ *
+ * see bug: https://bugs.kde.org/show_bug.cgi?id=230692
+ */
+void KCompositeJobTest::testDeletionDuringExecution()
+{
+ QObject *someParent = new QObject;
+ KJob *job = new TestJob(someParent);
+
+ CompositeJob *compositeJob = new CompositeJob;
+ compositeJob->setAutoDelete(false);
+ QVERIFY(compositeJob->addSubjob(job));
+
+ QCOMPARE(job->parent(), compositeJob);
+
+ QSignalSpy destroyed_spy(job, &QObject::destroyed);
+ // check if job got reparented properly
+ delete someParent;
+ someParent = nullptr;
+ // the job should still exist, because it is a child of KCompositeJob now
+ QCOMPARE(destroyed_spy.size(), 0);
+
+ // start async, the subjob takes 1 second to finish
+ compositeJob->start();
+
+ // delete the job during the execution
+ delete compositeJob;
+ compositeJob = nullptr;
+ // at this point, the subjob should be deleted, too
+ QCOMPARE(destroyed_spy.size(), 1);
+}
+
+QTEST_GUILESS_MAIN(KCompositeJobTest)
--- /dev/null
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2013 Kevin Funk <kevin@kfunk.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KCOMPOSITEJOBTEST_H
+#define KCOMPOSITEJOBTEST_H
+
+#include <QEventLoop>
+#include <QObject>
+
+#include "kcompositejob.h"
+
+class TestJob : public KJob
+{
+ Q_OBJECT
+
+public:
+ explicit TestJob(QObject *parent = nullptr);
+
+ /// Takes 1 second to finish
+ void start() override;
+
+private Q_SLOTS:
+ void doEmit();
+};
+
+class CompositeJob : public KCompositeJob
+{
+ Q_OBJECT
+
+public:
+ explicit CompositeJob(QObject *parent = nullptr)
+ : KCompositeJob(parent)
+ {
+ }
+
+ void start() override;
+ bool addSubjob(KJob *job) override;
+
+protected Q_SLOTS:
+ void slotResult(KJob *job) override;
+};
+
+class KCompositeJobTest : public QObject
+{
+ Q_OBJECT
+
+public:
+ KCompositeJobTest();
+
+private Q_SLOTS:
+ void testDeletionDuringExecution();
+
+private:
+ QEventLoop loop;
+};
+
+#endif // KCOMPOSITEJOBTEST_H
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014 Montel Laurent <montel@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+// test object
+#include "kdelibs4configmigrator.h"
+// Qt
+#include <QFile>
+#include <QObject>
+#include <QStandardPaths>
+#include <QTemporaryDir>
+#include <QTest>
+
+class Kdelibs4ConfigMigratorTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void initTestCase();
+ void shouldNotMigrateIfKde4HomeDirDoesntExist();
+ void shouldMigrateIfKde4HomeDirExist();
+ void shouldMigrateConfigFiles();
+ void shouldMigrateUiFiles();
+};
+
+void Kdelibs4ConfigMigratorTest::initTestCase()
+{
+ QStandardPaths::setTestModeEnabled(true);
+ const QString configHome = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
+ QDir(configHome).removeRecursively();
+ const QString dataHome = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
+ QDir(dataHome).removeRecursively();
+}
+
+void Kdelibs4ConfigMigratorTest::shouldNotMigrateIfKde4HomeDirDoesntExist()
+{
+ qputenv("KDEHOME", "");
+ Kdelibs4ConfigMigrator migration(QLatin1String("foo"));
+ QCOMPARE(migration.migrate(), false);
+}
+
+void Kdelibs4ConfigMigratorTest::shouldMigrateIfKde4HomeDirExist()
+{
+ QTemporaryDir kdehomeDir;
+ QVERIFY(kdehomeDir.isValid());
+ const QString kdehome = kdehomeDir.path();
+ qputenv("KDEHOME", QFile::encodeName(kdehome));
+ Kdelibs4ConfigMigrator migration(QLatin1String("foo"));
+ QCOMPARE(migration.migrate(), true);
+}
+
+void Kdelibs4ConfigMigratorTest::shouldMigrateConfigFiles()
+{
+ QTemporaryDir kdehomeDir;
+ const QString kdehome = kdehomeDir.path();
+ qputenv("KDEHOME", QFile::encodeName(kdehome));
+
+ // Generate kde4 config dir
+ const QString configPath = kdehome + QLatin1Char('/') + QLatin1String("share/config/");
+ QDir().mkpath(configPath);
+ QVERIFY(QDir(configPath).exists());
+
+ QStringList listConfig;
+ listConfig << QLatin1String("foorc") << QLatin1String("foo1rc");
+ for (const QString &config : qAsConst(listConfig)) {
+ QFile fooConfigFile(QLatin1String(KDELIBS4CONFIGMIGRATOR_DATA_DIR) + QLatin1Char('/') + config);
+ QVERIFY(fooConfigFile.exists());
+ const QString storedConfigFilePath = configPath + QLatin1Char('/') + config;
+ QVERIFY(QFile::copy(fooConfigFile.fileName(), storedConfigFilePath));
+ QCOMPARE(QStandardPaths::locate(QStandardPaths::ConfigLocation, config), QString());
+ }
+
+ Kdelibs4ConfigMigrator migration(QLatin1String("foo"));
+ migration.setConfigFiles(QStringList() << listConfig);
+ QVERIFY(migration.migrate());
+
+ for (const QString &config : qAsConst(listConfig)) {
+ const QString migratedConfigFile = QStandardPaths::locate(QStandardPaths::ConfigLocation, config);
+ QVERIFY(!migratedConfigFile.isEmpty());
+ QVERIFY(QFile(migratedConfigFile).exists());
+ QFile::remove(migratedConfigFile);
+ }
+}
+
+void Kdelibs4ConfigMigratorTest::shouldMigrateUiFiles()
+{
+ QTemporaryDir kdehomeDir;
+ const QString kdehome = kdehomeDir.path();
+ qputenv("KDEHOME", QFile::encodeName(kdehome));
+
+ const QString appName = QLatin1String("foo");
+
+ // Generate kde4 data dir
+ const QString dataPath = kdehome + QLatin1Char('/') + QLatin1String("share/apps/");
+ QDir().mkpath(dataPath);
+ QVERIFY(QDir(dataPath).exists());
+
+ const QString xdgDatahome = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
+
+ QStringList listUi;
+ listUi << QLatin1String("appuirc") << QLatin1String("appui1rc");
+ for (const QString &uifile : qAsConst(listUi)) {
+ QFile fooConfigFile(QLatin1String(KDELIBS4CONFIGMIGRATOR_DATA_DIR) + QLatin1Char('/') + uifile);
+ QVERIFY(fooConfigFile.exists());
+ QDir().mkpath(dataPath + QLatin1Char('/') + appName);
+ const QString storedConfigFilePath = dataPath + QLatin1Char('/') + appName + QLatin1Char('/') + uifile;
+ QVERIFY(QFile::copy(fooConfigFile.fileName(), storedConfigFilePath));
+
+ const QString xdgUiFile = xdgDatahome + QLatin1String("/kxmlgui5/") + appName + QLatin1Char('/') + uifile;
+ QVERIFY(!QFile::exists(xdgUiFile));
+ }
+
+ Kdelibs4ConfigMigrator migration(appName);
+ migration.setUiFiles(QStringList() << listUi);
+ QVERIFY(migration.migrate());
+
+ for (const QString &uifile : qAsConst(listUi)) {
+ const QString xdgUiFile = xdgDatahome + QLatin1String("/kxmlgui5/") + appName + QLatin1Char('/') + uifile;
+ QVERIFY(QFile(xdgUiFile).exists());
+ QFile::remove(xdgUiFile);
+ }
+}
+
+QTEST_MAIN(Kdelibs4ConfigMigratorTest)
+
+#include "kdelibs4configmigratortest.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014 David Faure <faure@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+// test object
+#include <kdelibs4migration.h>
+// Qt
+#include <QFile>
+#include <QObject>
+#include <QTemporaryDir>
+#include <QTest>
+
+class MigrationTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testPaths();
+};
+
+void MigrationTest::testPaths()
+{
+ // Setup
+ QTemporaryDir kdehomeDir;
+ QVERIFY(kdehomeDir.isValid());
+ QString kdehome = kdehomeDir.path();
+ qputenv("KDEHOME", QFile::encodeName(kdehome));
+
+ QString oldConfigDir = kdehome + QStringLiteral("/share/config/");
+ QVERIFY(QDir().mkpath(oldConfigDir));
+ QString oldAppsDir = kdehome + QStringLiteral("/share/apps/");
+ QVERIFY(QDir().mkpath(oldAppsDir));
+ // Test
+ Kdelibs4Migration migration;
+
+ QVERIFY(migration.kdeHomeFound());
+ QCOMPARE(migration.saveLocation("config"), oldConfigDir);
+ QCOMPARE(migration.saveLocation("data"), oldAppsDir);
+}
+
+QTEST_MAIN(MigrationTest)
+
+#include "kdelibs4migrationtest.moc"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2009 David Faure <faure@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include <kdirwatch.h>
+
+#include <QDebug>
+#include <QDir>
+#include <QFileInfo>
+#include <QSignalSpy>
+#include <QTemporaryDir>
+#include <QTest>
+#include <QThread>
+#include <sys/stat.h>
+#ifdef Q_OS_UNIX
+#include <unistd.h> // ::link()
+#endif
+
+#include "config-tests.h"
+#include "kcoreaddons_debug.h"
+
+// Debugging notes: to see which inotify signals are emitted, either set s_verboseDebug=true
+// at the top of kdirwatch.cpp, or use the command-line tool "inotifywait -m /path"
+
+// Note that kdirlistertest and kdirmodeltest also exercise KDirWatch quite a lot.
+
+static const char *methodToString(KDirWatch::Method method)
+{
+ switch (method) {
+ case KDirWatch::FAM:
+ return "Fam";
+ case KDirWatch::INotify:
+ return "INotify";
+ case KDirWatch::Stat:
+ return "Stat";
+ case KDirWatch::QFSWatch:
+ return "QFSWatch";
+ }
+ return "ERROR!";
+}
+
+class StaticObject
+{
+public:
+ KDirWatch m_dirWatch;
+};
+Q_GLOBAL_STATIC(StaticObject, s_staticObject)
+
+class StaticObjectUsingSelf // like KSambaShare does, bug 353080
+{
+public:
+ StaticObjectUsingSelf()
+ {
+ KDirWatch::self();
+ }
+ ~StaticObjectUsingSelf()
+ {
+ if (KDirWatch::exists() && KDirWatch::self()->contains(QDir::homePath())) {
+ KDirWatch::self()->removeDir(QDir::homePath());
+ }
+ }
+};
+Q_GLOBAL_STATIC(StaticObjectUsingSelf, s_staticObjectUsingSelf)
+
+class KDirWatch_UnitTest : public QObject
+{
+ Q_OBJECT
+public:
+ KDirWatch_UnitTest()
+ {
+ // Speed up the test by making the kdirwatch timer (to compress changes) faster
+ qputenv("KDIRWATCH_POLLINTERVAL", "50");
+ qputenv("KDIRWATCH_METHOD", KDIRWATCH_TEST_METHOD);
+ s_staticObjectUsingSelf();
+
+ m_path = m_tempDir.path() + QLatin1Char('/');
+ KDirWatch *dirW = &s_staticObject()->m_dirWatch;
+ m_stat = dirW->internalMethod() == KDirWatch::Stat;
+ m_slow = (dirW->internalMethod() == KDirWatch::FAM || m_stat);
+ qCDebug(KCOREADDONS_DEBUG) << "Using method" << methodToString(dirW->internalMethod());
+ }
+
+private Q_SLOTS: // test methods
+ void initTestCase()
+ {
+ QFileInfo pathInfo(m_path);
+ QVERIFY(pathInfo.isDir() && pathInfo.isWritable());
+
+ // By creating the files upfront, we save waiting a full second for an mtime change
+ createFile(m_path + QLatin1String("ExistingFile"));
+ createFile(m_path + QLatin1String("TestFile"));
+ createFile(m_path + QLatin1String("nested_0"));
+ createFile(m_path + QLatin1String("nested_1"));
+
+ s_staticObject()->m_dirWatch.addFile(m_path + QLatin1String("ExistingFile"));
+ }
+ void touchOneFile();
+ void touch1000Files();
+ void watchAndModifyOneFile();
+ void removeAndReAdd();
+ void watchNonExistent();
+ void watchNonExistentWithSingleton();
+ void testDelete();
+ void testDeleteAndRecreateFile();
+ void testDeleteAndRecreateDir();
+ void testMoveTo();
+ void nestedEventLoop();
+ void testHardlinkChange();
+ void stopAndRestart();
+ void benchCreateTree();
+ void benchCreateWatcher();
+ void benchNotifyWatcher();
+ void testRefcounting();
+
+protected Q_SLOTS: // internal slots
+ void nestedEventLoopSlot();
+
+private:
+ void waitUntilMTimeChange(const QString &path);
+ void waitUntilNewSecond();
+ void waitUntilAfter(const QDateTime &ctime);
+ QList<QVariantList> waitForDirtySignal(KDirWatch &watch, int expected);
+ QList<QVariantList> waitForDeletedSignal(KDirWatch &watch, int expected);
+ bool waitForOneSignal(KDirWatch &watch, const char *sig, const QString &path);
+ bool waitForRecreationSignal(KDirWatch &watch, const QString &path);
+ bool verifySignalPath(QSignalSpy &spy, const char *sig, const QString &expectedPath);
+ void createFile(const QString &path);
+ QString createFile(int num);
+ void removeFile(int num);
+ void appendToFile(const QString &path);
+ void appendToFile(int num);
+ int createDirectoryTree(const QString &path, int depth = 4);
+
+ QTemporaryDir m_tempDir;
+ QString m_path;
+ bool m_slow;
+ bool m_stat;
+};
+
+QTEST_MAIN(KDirWatch_UnitTest)
+
+// Just to make the inotify packets bigger
+static const char s_filePrefix[] = "This_is_a_test_file_";
+
+static const int s_maxTries = 50;
+
+// helper method: create a file
+void KDirWatch_UnitTest::createFile(const QString &path)
+{
+ QFile file(path);
+ QVERIFY(file.open(QIODevice::WriteOnly));
+#ifdef Q_OS_FREEBSD
+ // FreeBSD has inotify implemented as user-space library over native kevent API.
+ // When using it, one has to open() a file to start watching it, so workaround
+ // test breakage by giving inotify time to react to file creation.
+ // Full context: https://github.com/libinotify-kqueue/libinotify-kqueue/issues/10
+ if (!m_slow)
+ QThread::msleep(1);
+#endif
+ file.write(QByteArray("foo"));
+ file.close();
+}
+
+// helper method: create a file (identified by number)
+QString KDirWatch_UnitTest::createFile(int num)
+{
+ const QString fileName = QLatin1String(s_filePrefix) + QString::number(num);
+ createFile(m_path + fileName);
+ return m_path + fileName;
+}
+
+// helper method: delete a file (identified by number)
+void KDirWatch_UnitTest::removeFile(int num)
+{
+ const QString fileName = QLatin1String(s_filePrefix) + QString::number(num);
+ QFile::remove(m_path + fileName);
+}
+
+int KDirWatch_UnitTest::createDirectoryTree(const QString &basePath, int depth)
+{
+ int filesCreated = 0;
+
+ const int numFiles = 10;
+ for (int i = 0; i < numFiles; ++i) {
+ createFile(basePath + QLatin1Char('/') + QLatin1String(s_filePrefix) + QString::number(i));
+ ++filesCreated;
+ }
+
+ if (depth <= 0) {
+ return filesCreated;
+ }
+
+ const int numFolders = 5;
+ for (int i = 0; i < numFolders; ++i) {
+ const QString childPath = basePath + QLatin1String("/subdir") + QString::number(i);
+ QDir().mkdir(childPath);
+ filesCreated += createDirectoryTree(childPath, depth - 1);
+ }
+
+ return filesCreated;
+}
+
+void KDirWatch_UnitTest::waitUntilMTimeChange(const QString &path)
+{
+ // Wait until the current second is more than the file's mtime
+ // otherwise this change will go unnoticed
+
+ QFileInfo fi(path);
+ QVERIFY(fi.exists());
+ const QDateTime ctime = fi.lastModified();
+ waitUntilAfter(ctime);
+}
+
+void KDirWatch_UnitTest::waitUntilNewSecond()
+{
+ QDateTime now = QDateTime::currentDateTime();
+ waitUntilAfter(now);
+}
+
+void KDirWatch_UnitTest::waitUntilAfter(const QDateTime &ctime)
+{
+ int totalWait = 0;
+ QDateTime now;
+ Q_FOREVER {
+ now = QDateTime::currentDateTime();
+ if (now.toMSecsSinceEpoch() / 1000 == ctime.toMSecsSinceEpoch() / 1000) // truncate milliseconds
+ {
+ totalWait += 50;
+ QTest::qWait(50);
+ } else {
+ QVERIFY(now > ctime); // can't go back in time ;)
+ QTest::qWait(50); // be safe
+ break;
+ }
+ }
+ // if (totalWait > 0)
+ qCDebug(KCOREADDONS_DEBUG) << "Waited" << totalWait << "ms so that now" << now.toString(Qt::ISODate) << "is >" << ctime.toString(Qt::ISODate);
+}
+
+// helper method: modifies a file
+void KDirWatch_UnitTest::appendToFile(const QString &path)
+{
+ QVERIFY(QFile::exists(path));
+ waitUntilMTimeChange(path);
+
+ QFile file(path);
+ QVERIFY(file.open(QIODevice::Append | QIODevice::WriteOnly));
+ file.write(QByteArray("foobar"));
+ file.close();
+}
+
+// helper method: modifies a file (identified by number)
+void KDirWatch_UnitTest::appendToFile(int num)
+{
+ const QString fileName = QLatin1String(s_filePrefix) + QString::number(num);
+ appendToFile(m_path + fileName);
+}
+
+static QString removeTrailingSlash(const QString &path)
+{
+ if (path.endsWith(QLatin1Char('/'))) {
+ return path.left(path.length() - 1);
+ } else {
+ return path;
+ }
+}
+
+// helper method
+QList<QVariantList> KDirWatch_UnitTest::waitForDirtySignal(KDirWatch &watch, int expected)
+{
+ QSignalSpy spyDirty(&watch, &KDirWatch::dirty);
+ int numTries = 0;
+ // Give time for KDirWatch to notify us
+ while (spyDirty.count() < expected) {
+ if (++numTries > s_maxTries) {
+ qWarning() << "Timeout waiting for KDirWatch. Got" << spyDirty.count() << "dirty() signals, expected" << expected;
+ return std::move(spyDirty);
+ }
+ spyDirty.wait(50);
+ }
+ return std::move(spyDirty);
+}
+
+bool KDirWatch_UnitTest::waitForOneSignal(KDirWatch &watch, const char *sig, const QString &path)
+{
+ const QString expectedPath = removeTrailingSlash(path);
+ while (true) {
+ QSignalSpy spyDirty(&watch, sig);
+ int numTries = 0;
+ // Give time for KDirWatch to notify us
+ while (spyDirty.isEmpty()) {
+ if (++numTries > s_maxTries) {
+ qWarning() << "Timeout waiting for KDirWatch signal" << QByteArray(sig).mid(1) << "(" << path << ")";
+ return false;
+ }
+ spyDirty.wait(50);
+ }
+ return verifySignalPath(spyDirty, sig, expectedPath);
+ }
+}
+
+bool KDirWatch_UnitTest::verifySignalPath(QSignalSpy &spy, const char *sig, const QString &expectedPath)
+{
+ for (int i = 0; i < spy.count(); ++i) {
+ const QString got = spy[i][0].toString();
+ if (got == expectedPath) {
+ return true;
+ }
+ if (got.startsWith(expectedPath + QLatin1Char('/'))) {
+ qCDebug(KCOREADDONS_DEBUG) << "Ignoring (inotify) notification of" << (sig + 1) << '(' << got << ')';
+ continue;
+ }
+ qWarning() << "Expected" << sig << '(' << expectedPath << ')' << "but got" << sig << '(' << got << ')';
+ return false;
+ }
+ return false;
+}
+
+bool KDirWatch_UnitTest::waitForRecreationSignal(KDirWatch &watch, const QString &path)
+{
+ // When watching for a deleted + created signal pair, the two might come so close that
+ // using waitForOneSignal will miss the created signal. This function monitors both all
+ // the time to ensure both are received.
+ //
+ // In addition, it allows dirty() to be emitted (for that same path) as an alternative
+
+ const QString expectedPath = removeTrailingSlash(path);
+ QSignalSpy spyDirty(&watch, &KDirWatch::dirty);
+ QSignalSpy spyDeleted(&watch, &KDirWatch::deleted);
+ QSignalSpy spyCreated(&watch, &KDirWatch::created);
+
+ int numTries = 0;
+ while (spyDeleted.isEmpty() && spyDirty.isEmpty()) {
+ if (++numTries > s_maxTries) {
+ return false;
+ }
+ spyDeleted.wait(50);
+ while (!spyDirty.isEmpty()) {
+ if (spyDirty.at(0).at(0).toString() != expectedPath) { // unrelated
+ spyDirty.removeFirst();
+ }
+ }
+ }
+ if (!spyDirty.isEmpty()) {
+ return true;
+ }
+
+ // Don't bother waiting for the created signal if the signal spy already received a signal.
+ if (spyCreated.isEmpty() && !spyCreated.wait(50 * s_maxTries)) {
+ qWarning() << "Timeout waiting for KDirWatch signal created(QString) (" << path << ")";
+ return false;
+ }
+
+ return verifySignalPath(spyDeleted, "deleted(QString)", expectedPath) && verifySignalPath(spyCreated, "created(QString)", expectedPath);
+}
+
+QList<QVariantList> KDirWatch_UnitTest::waitForDeletedSignal(KDirWatch &watch, int expected)
+{
+ QSignalSpy spyDeleted(&watch, &KDirWatch::created);
+ int numTries = 0;
+ // Give time for KDirWatch to notify us
+ while (spyDeleted.count() < expected) {
+ if (++numTries > s_maxTries) {
+ qWarning() << "Timeout waiting for KDirWatch. Got" << spyDeleted.count() << "deleted() signals, expected" << expected;
+ return std::move(spyDeleted);
+ }
+ spyDeleted.wait(50);
+ }
+ return std::move(spyDeleted);
+}
+
+void KDirWatch_UnitTest::touchOneFile() // watch a dir, create a file in it
+{
+ KDirWatch watch;
+ watch.addDir(m_path);
+ watch.startScan();
+
+ waitUntilMTimeChange(m_path);
+
+ // dirty(the directory) should be emitted.
+ QSignalSpy spyCreated(&watch, &KDirWatch::created);
+ createFile(0);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+ QCOMPARE(spyCreated.count(), 0); // "This is not emitted when creating a file is created in a watched directory."
+
+ removeFile(0);
+}
+
+void KDirWatch_UnitTest::touch1000Files()
+{
+ KDirWatch watch;
+ watch.addDir(m_path);
+ watch.startScan();
+
+ waitUntilMTimeChange(m_path);
+
+ const int fileCount = 100;
+ for (int i = 0; i < fileCount; ++i) {
+ createFile(i);
+ }
+
+ QList<QVariantList> spy = waitForDirtySignal(watch, fileCount);
+ if (watch.internalMethod() == KDirWatch::INotify) {
+ QVERIFY(spy.count() >= fileCount);
+ } else {
+ // More stupid backends just see one mtime change on the directory
+ QVERIFY(spy.count() >= 1);
+ }
+
+ for (int i = 0; i < fileCount; ++i) {
+ removeFile(i);
+ }
+}
+
+void KDirWatch_UnitTest::watchAndModifyOneFile() // watch a specific file, and modify it
+{
+ KDirWatch watch;
+ const QString existingFile = m_path + QLatin1String("ExistingFile");
+ watch.addFile(existingFile);
+ watch.startScan();
+ if (m_slow) {
+ waitUntilNewSecond();
+ }
+ appendToFile(existingFile);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), existingFile));
+}
+
+void KDirWatch_UnitTest::removeAndReAdd()
+{
+ KDirWatch watch;
+ watch.addDir(m_path);
+ // This triggers bug #374075.
+ watch.addDir(QStringLiteral(":/kio5/newfile-templates"));
+ watch.startScan();
+ if (watch.internalMethod() != KDirWatch::INotify) {
+ waitUntilNewSecond(); // necessary for mtime checks in scanEntry
+ }
+ createFile(0);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+
+ // Just like KDirLister does: remove the watch, then re-add it.
+ watch.removeDir(m_path);
+ watch.addDir(m_path);
+ if (watch.internalMethod() != KDirWatch::INotify) {
+ waitUntilMTimeChange(m_path); // necessary for FAM and QFSWatcher
+ }
+ createFile(1);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+}
+
+void KDirWatch_UnitTest::watchNonExistent()
+{
+ KDirWatch watch;
+ // Watch "subdir", that doesn't exist yet
+ const QString subdir = m_path + QLatin1String("subdir");
+ QVERIFY(!QFile::exists(subdir));
+ watch.addDir(subdir);
+ watch.startScan();
+
+ if (m_slow) {
+ waitUntilNewSecond();
+ }
+
+ // Now create it, KDirWatch should emit created()
+ qCDebug(KCOREADDONS_DEBUG) << "Creating" << subdir;
+ QDir().mkdir(subdir);
+
+ QVERIFY(waitForOneSignal(watch, SIGNAL(created(QString)), subdir));
+
+ KDirWatch::statistics();
+
+ // Play with addDir/removeDir, just for fun
+ watch.addDir(subdir);
+ watch.removeDir(subdir);
+ watch.addDir(subdir);
+
+ // Now watch files that don't exist yet
+ const QString file = subdir + QLatin1String("/0");
+ watch.addFile(file); // doesn't exist yet
+ const QString file1 = subdir + QLatin1String("/1");
+ watch.addFile(file1); // doesn't exist yet
+ watch.removeFile(file1); // forget it again
+
+ KDirWatch::statistics();
+
+ QVERIFY(!QFile::exists(file));
+ // Now create it, KDirWatch should emit created
+ qCDebug(KCOREADDONS_DEBUG) << "Creating" << file;
+ createFile(file);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(created(QString)), file));
+
+ appendToFile(file);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), file));
+
+ // Create the file after all; we're not watching for it, but the dir will emit dirty
+ createFile(file1);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), subdir));
+}
+
+void KDirWatch_UnitTest::watchNonExistentWithSingleton()
+{
+ const QString file = QLatin1String("/root/.ssh/authorized_keys");
+ KDirWatch::self()->addFile(file);
+ // When running this test in KDIRWATCH_METHOD=QFSWatch, or when FAM is not available
+ // and we fallback to qfswatch when inotify fails above, we end up creating the fsWatch
+ // in the kdirwatch singleton. Bug 261541 discovered that Qt hanged when deleting fsWatch
+ // once QCoreApp was gone, this is what this test is about.
+}
+
+void KDirWatch_UnitTest::testDelete()
+{
+ const QString file1 = m_path + QLatin1String("del");
+ if (!QFile::exists(file1)) {
+ createFile(file1);
+ }
+ waitUntilMTimeChange(file1);
+
+ // Watch the file, then delete it, KDirWatch will emit deleted (and possibly dirty for the dir, if mtime changed)
+ KDirWatch watch;
+ watch.addFile(file1);
+
+ KDirWatch::statistics();
+
+ QSignalSpy spyDirty(&watch, &KDirWatch::dirty);
+ QFile::remove(file1);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(deleted(QString)), file1));
+ QTest::qWait(40); // just in case delayed processing would emit it
+ QCOMPARE(spyDirty.count(), 0);
+}
+
+void KDirWatch_UnitTest::testDeleteAndRecreateFile() // Useful for /etc/localtime for instance
+{
+ const QString subdir = m_path + QLatin1String("subdir");
+ QDir().mkdir(subdir);
+ const QString file1 = subdir + QLatin1String("/1");
+ if (!QFile::exists(file1)) {
+ createFile(file1);
+ }
+ waitUntilMTimeChange(file1);
+
+ // Watch the file, then delete it, KDirWatch will emit deleted (and possibly dirty for the dir, if mtime changed)
+ KDirWatch watch;
+ watch.addFile(file1);
+
+ // Make sure this even works multiple times, as needed for ksycoca
+ for (int i = 0; i < 5; ++i) {
+ if (m_slow || watch.internalMethod() == KDirWatch::QFSWatch) {
+ waitUntilNewSecond();
+ }
+
+ qCDebug(KCOREADDONS_DEBUG) << "Attempt #" << (i + 1) << "removing+recreating" << file1;
+
+ // When watching for a deleted + created signal pair, the two might come so close that
+ // using waitForOneSignal will miss the created signal. This function monitors both all
+ // the time to ensure both are received.
+ //
+ // In addition, allow dirty() to be emitted (for that same path) as an alternative
+
+ const QString expectedPath = file1;
+ QSignalSpy spyDirty(&watch, &KDirWatch::dirty);
+ QSignalSpy spyDeleted(&watch, &KDirWatch::deleted);
+ QSignalSpy spyCreated(&watch, &KDirWatch::created);
+
+ // WHEN
+ QFile::remove(file1);
+ // And recreate immediately, to try and fool KDirWatch with unchanged ctime/mtime ;)
+ // (This emulates the /etc/localtime case)
+ createFile(file1);
+
+ // THEN
+ int numTries = 0;
+ while (spyDeleted.isEmpty() && spyDirty.isEmpty()) {
+ if (++numTries > s_maxTries) {
+ QFAIL("Failed to detect file deletion and recreation through either a deleted/created signal pair or through a dirty signal!");
+ return;
+ }
+ spyDeleted.wait(50);
+ while (!spyDirty.isEmpty()) {
+ if (spyDirty.at(0).at(0).toString() != expectedPath) { // unrelated
+ spyDirty.removeFirst();
+ } else {
+ break;
+ }
+ }
+ }
+ if (!spyDirty.isEmpty()) {
+ continue; // all ok
+ }
+
+ // Don't bother waiting for the created signal if the signal spy already received a signal.
+ if (spyCreated.isEmpty() && !spyCreated.wait(50 * s_maxTries)) {
+ qWarning() << "Timeout waiting for KDirWatch signal created(QString) (" << expectedPath << ")";
+ QFAIL("Timeout waiting for KDirWatch signal created, after deleted was emitted");
+ return;
+ }
+
+ QVERIFY(verifySignalPath(spyDeleted, "deleted(QString)", expectedPath) && verifySignalPath(spyCreated, "created(QString)", expectedPath));
+ }
+
+ waitUntilMTimeChange(file1);
+
+ appendToFile(file1);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), file1));
+}
+
+void KDirWatch_UnitTest::testDeleteAndRecreateDir()
+{
+ // Like KDirModelTest::testOverwriteFileWithDir does at the end.
+ // The linux-2.6.31 bug made kdirwatch emit deletion signals about the -new- dir!
+ QTemporaryDir *tempDir1 = new QTemporaryDir(QDir::tempPath() + QLatin1Char('/') + QLatin1String("olddir-"));
+ KDirWatch watch;
+ const QString path1 = tempDir1->path() + QLatin1Char('/');
+ watch.addDir(path1);
+
+ delete tempDir1;
+ QTemporaryDir *tempDir2 = new QTemporaryDir(QDir::tempPath() + QLatin1Char('/') + QLatin1String("newdir-"));
+ const QString path2 = tempDir2->path() + QLatin1Char('/');
+ watch.addDir(path2);
+
+ QVERIFY(waitForOneSignal(watch, SIGNAL(deleted(QString)), path1));
+
+ delete tempDir2;
+}
+
+void KDirWatch_UnitTest::testMoveTo()
+{
+ // This reproduces the famous digikam crash, #222974
+ // A watched file was being rewritten (overwritten by ksavefile),
+ // which gives inotify notifications "moved_to" followed by "delete_self"
+ //
+ // What happened then was that the delayed slotRescan
+ // would adjust things, making it status==Normal but the entry was
+ // listed as a "non-existent sub-entry" for the parent directory.
+ // That's inconsistent, and after removeFile() a dangling sub-entry would be left.
+
+ // Initial data: creating file subdir/1
+ const QString file1 = m_path + QLatin1String("moveTo");
+ createFile(file1);
+
+ KDirWatch watch;
+ watch.addDir(m_path);
+ watch.addFile(file1);
+ watch.startScan();
+
+ if (watch.internalMethod() != KDirWatch::INotify) {
+ waitUntilMTimeChange(m_path);
+ }
+
+ // Atomic rename of "temp" to "file1", much like KAutoSave would do when saving file1 again
+ // ### TODO: this isn't an atomic rename anymore. We need ::rename for that, or API from Qt.
+ const QString filetemp = m_path + QLatin1String("temp");
+ createFile(filetemp);
+ QFile::remove(file1);
+ QVERIFY(QFile::rename(filetemp, file1)); // overwrite file1 with the tempfile
+ qCDebug(KCOREADDONS_DEBUG) << "Overwrite file1 with tempfile";
+
+ QSignalSpy spyCreated(&watch, &KDirWatch::created);
+ QSignalSpy spyDirty(&watch, &KDirWatch::dirty);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+
+ // Getting created() on an unwatched file is an inotify bonus, it's not part of the requirements.
+ if (watch.internalMethod() == KDirWatch::INotify) {
+ QCOMPARE(spyCreated.count(), 1);
+ QCOMPARE(spyCreated[0][0].toString(), file1);
+
+ QCOMPARE(spyDirty.size(), 2);
+ QCOMPARE(spyDirty[1][0].toString(), filetemp);
+ }
+
+ // make sure we're still watching it
+ appendToFile(file1);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), file1));
+
+ watch.removeFile(file1); // now we remove it
+
+ // Just touch another file to trigger a findSubEntry - this where the crash happened
+ waitUntilMTimeChange(m_path);
+ createFile(filetemp);
+#ifdef Q_OS_WIN
+ if (watch.internalMethod() == KDirWatch::QFSWatch) {
+ QEXPECT_FAIL(nullptr, "QFSWatch fails here on Windows!", Continue);
+ }
+#endif
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+}
+
+void KDirWatch_UnitTest::nestedEventLoop() // #220153: watch two files, and modify 2nd while in slot for 1st
+{
+ KDirWatch watch;
+
+ const QString file0 = m_path + QLatin1String("nested_0");
+ watch.addFile(file0);
+ const QString file1 = m_path + QLatin1String("nested_1");
+ watch.addFile(file1);
+ watch.startScan();
+
+ if (m_slow) {
+ waitUntilNewSecond();
+ }
+
+ appendToFile(file0);
+
+ // use own spy, to connect it before nestedEventLoopSlot, otherwise it reverses order
+ QSignalSpy spyDirty(&watch, &KDirWatch::dirty);
+ connect(&watch, &KDirWatch::dirty, this, &KDirWatch_UnitTest::nestedEventLoopSlot);
+ waitForDirtySignal(watch, 1);
+ QVERIFY(spyDirty.count() >= 2);
+ QCOMPARE(spyDirty[0][0].toString(), file0);
+ QCOMPARE(spyDirty[spyDirty.count() - 1][0].toString(), file1);
+}
+
+void KDirWatch_UnitTest::nestedEventLoopSlot()
+{
+ const KDirWatch *const_watch = qobject_cast<const KDirWatch *>(sender());
+ KDirWatch *watch = const_cast<KDirWatch *>(const_watch);
+ // let's not come in this slot again
+ disconnect(watch, &KDirWatch::dirty, this, &KDirWatch_UnitTest::nestedEventLoopSlot);
+
+ const QString file1 = m_path + QLatin1String("nested_1");
+ appendToFile(file1);
+ // The nested event processing here was from a messagebox in #220153
+ QList<QVariantList> spy = waitForDirtySignal(*watch, 1);
+ QVERIFY(spy.count() >= 1);
+ QCOMPARE(spy[spy.count() - 1][0].toString(), file1);
+
+ // Now the user pressed reload...
+ const QString file0 = m_path + QLatin1String("nested_0");
+ watch->removeFile(file0);
+ watch->addFile(file0);
+}
+
+void KDirWatch_UnitTest::testHardlinkChange()
+{
+#ifdef Q_OS_UNIX
+
+ // The unittest for the "detecting hardlink change to /etc/localtime" problem
+ // described on kde-core-devel (2009-07-03).
+ // It shows that watching a specific file doesn't inform us that the file is
+ // being recreated. Better watch the directory, for that.
+ // Well, it works with inotify (and fam - which uses inotify I guess?)
+
+ const QString existingFile = m_path + QLatin1String("ExistingFile");
+ KDirWatch watch;
+ watch.addFile(existingFile);
+ watch.startScan();
+
+ QFile::remove(existingFile);
+ const QString testFile = m_path + QLatin1String("TestFile");
+ QVERIFY(::link(QFile::encodeName(testFile).constData(), QFile::encodeName(existingFile).constData()) == 0); // make ExistingFile "point" to TestFile
+ QVERIFY(QFile::exists(existingFile));
+
+ QVERIFY(waitForRecreationSignal(watch, existingFile));
+
+ // The mtime of the existing file is the one of "TestFile", so it's old.
+ // We won't detect the change then, if we use that as baseline for waiting.
+ // We really need msec granularity, but that requires using statx which isn't available everywhere...
+ waitUntilNewSecond();
+ appendToFile(existingFile);
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), existingFile));
+#else
+ QSKIP("Unix-specific");
+#endif
+}
+
+void KDirWatch_UnitTest::stopAndRestart()
+{
+ KDirWatch watch;
+ watch.addDir(m_path);
+ watch.startScan();
+
+ waitUntilMTimeChange(m_path);
+
+ watch.stopDirScan(m_path);
+
+ qCDebug(KCOREADDONS_DEBUG) << "create file 2 at" << QDateTime::currentDateTime().toMSecsSinceEpoch();
+ const QString file2 = createFile(2);
+ QSignalSpy spyDirty(&watch, &KDirWatch::dirty);
+ QTest::qWait(200);
+ QCOMPARE(spyDirty.count(), 0); // suspended -> no signal
+
+ watch.restartDirScan(m_path);
+
+ QTest::qWait(200);
+
+#ifndef Q_OS_WIN
+ QCOMPARE(spyDirty.count(), 0); // as documented by restartDirScan: no signal
+ // On Windows, however, signals will get emitted, due to the ifdef Q_OS_WIN in the timestamp
+ // comparison ("trust QFSW since the mtime of dirs isn't modified")
+#endif
+
+ KDirWatch::statistics();
+
+ waitUntilMTimeChange(m_path); // necessary for the mtime comparison in scanEntry
+
+ qCDebug(KCOREADDONS_DEBUG) << "create file 3 at" << QDateTime::currentDateTime().toMSecsSinceEpoch();
+ const QString file3 = createFile(3);
+#ifdef Q_OS_WIN
+ if (watch.internalMethod() == KDirWatch::QFSWatch) {
+ QEXPECT_FAIL(nullptr, "QFSWatch fails here on Windows!", Continue);
+ }
+#endif
+ QVERIFY(waitForOneSignal(watch, SIGNAL(dirty(QString)), m_path));
+
+ QFile::remove(file2);
+ QFile::remove(file3);
+}
+
+void KDirWatch_UnitTest::benchCreateTree()
+{
+#if !ENABLE_BENCHMARKS
+ QSKIP("Benchmarks are disabled in debug mode");
+#endif
+ QTemporaryDir dir;
+
+ QBENCHMARK {
+ createDirectoryTree(dir.path());
+ }
+}
+
+void KDirWatch_UnitTest::benchCreateWatcher()
+{
+#if !ENABLE_BENCHMARKS
+ QSKIP("Benchmarks are disabled in debug mode");
+#endif
+ QTemporaryDir dir;
+ createDirectoryTree(dir.path());
+
+ QBENCHMARK {
+ KDirWatch watch;
+ watch.addDir(dir.path(), KDirWatch::WatchSubDirs | KDirWatch::WatchFiles);
+ }
+}
+
+void KDirWatch_UnitTest::benchNotifyWatcher()
+{
+#if !ENABLE_BENCHMARKS
+ QSKIP("Benchmarks are disabled in debug mode");
+#endif
+ QTemporaryDir dir;
+ // create the dir once upfront
+ auto numFiles = createDirectoryTree(dir.path());
+ waitUntilMTimeChange(dir.path());
+
+ KDirWatch watch;
+ watch.addDir(dir.path(), KDirWatch::WatchSubDirs | KDirWatch::WatchFiles);
+
+ // now touch all the files repeatedly and wait for the dirty updates to come in
+ QSignalSpy spy(&watch, &KDirWatch::dirty);
+ QBENCHMARK {
+ createDirectoryTree(dir.path());
+ QTRY_COMPARE_WITH_TIMEOUT(spy.count(), numFiles, 30000);
+ spy.clear();
+ }
+}
+
+void KDirWatch_UnitTest::testRefcounting()
+{
+#if QT_CONFIG(cxx11_future)
+ bool initialExists = false;
+ bool secondExists = true; // the expectation is it will be set false
+ auto thread = QThread::create([&] {
+ QTemporaryDir dir;
+ {
+ KDirWatch watch;
+ watch.addFile(dir.path());
+ initialExists = KDirWatch::exists();
+ } // out of scope, the internal private should have been unset
+ secondExists = KDirWatch::exists();
+ });
+ thread->start();
+ thread->wait();
+ delete thread;
+ QVERIFY(initialExists);
+ QVERIFY(!secondExists);
+#endif
+}
+
+#include "kdirwatch_unittest.moc"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ SPDX-FileCopyrightText: 2000-2005 David Faure <faure@kde.org>
+ SPDX-FileCopyrightText: 2021 Alexander Lohnau <alexander.lohnau@gmx.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kfileutilstest.h"
+
+#include <KFileUtils>
+#include <QStandardPaths>
+#include <QTest>
+
+QTEST_MAIN(KFileUtilsTest)
+
+void KFileUtilsTest::testSuggestName_data()
+{
+ QTest::addColumn<QString>("oldName");
+ QTest::addColumn<QStringList>("existingFiles");
+ QTest::addColumn<QString>("expectedOutput");
+
+ QTest::newRow("non-existing") << "foobar" << QStringList() << "foobar (1)";
+ QTest::newRow("existing") << "foobar" << QStringList(QStringLiteral("foobar")) << "foobar (1)";
+ QTest::newRow("existing_1") << "foobar" << (QStringList() << QStringLiteral("foobar") << QStringLiteral("foobar (1)")) << "foobar (2)";
+ QTest::newRow("extension") << "foobar.txt" << QStringList() << "foobar (1).txt";
+ QTest::newRow("extension_exists") << "foobar.txt" << (QStringList() << QStringLiteral("foobar.txt")) << "foobar (1).txt";
+ QTest::newRow("extension_exists_1") << "foobar.txt" << (QStringList() << QStringLiteral("foobar.txt") << QStringLiteral("foobar (1).txt"))
+ << "foobar (2).txt";
+ QTest::newRow("two_extensions") << "foobar.tar.gz" << QStringList() << "foobar (1).tar.gz";
+ QTest::newRow("two_extensions_exists") << "foobar.tar.gz" << (QStringList() << QStringLiteral("foobar.tar.gz")) << "foobar (1).tar.gz";
+ QTest::newRow("two_extensions_exists_1") << "foobar.tar.gz" << (QStringList() << QStringLiteral("foobar.tar.gz") << QStringLiteral("foobar (1).tar.gz"))
+ << "foobar (2).tar.gz";
+ QTest::newRow("with_space") << "foo bar" << QStringList(QStringLiteral("foo bar")) << "foo bar (1)";
+ QTest::newRow("dot_at_beginning") << ".aFile.tar.gz" << QStringList() << ".aFile (1).tar.gz";
+ QTest::newRow("dots_at_beginning") << "..aFile.tar.gz" << QStringList() << "..aFile (1).tar.gz";
+ QTest::newRow("empty_basename") << ".txt" << QStringList() << ". (1).txt";
+ QTest::newRow("empty_basename_2dots") << "..txt" << QStringList() << ". (1).txt";
+ QTest::newRow("basename_with_dots") << "filename.5.3.2.tar.gz" << QStringList() << "filename.5.3.2 (1).tar.gz";
+ QTest::newRow("unknown_extension_trashinfo") << "fileFromHome.trashinfo" << QStringList() << "fileFromHome (1).trashinfo";
+}
+
+void KFileUtilsTest::testSuggestName()
+{
+ QFETCH(QString, oldName);
+ QFETCH(QStringList, existingFiles);
+ QFETCH(QString, expectedOutput);
+
+ QTemporaryDir dir;
+ const QUrl baseUrl = QUrl::fromLocalFile(dir.path());
+ for (const QString &localFile : qAsConst(existingFiles)) {
+ QFile file(dir.path() + QLatin1Char('/') + localFile);
+ QVERIFY(file.open(QIODevice::WriteOnly));
+ }
+ QCOMPARE(KFileUtils::suggestName(baseUrl, oldName), expectedOutput);
+}
+
+void KFileUtilsTest::testfindAllUniqueFiles()
+{
+ const QString testBaseDirPath = QDir::currentPath() + QLatin1String("/kfileutilstestdata/");
+ QDir testDataBaseDir(testBaseDirPath);
+ testDataBaseDir.mkpath(QStringLiteral("."));
+ testDataBaseDir.mkpath(QStringLiteral("testdir1/testDirName"));
+ testDataBaseDir.mkpath(QStringLiteral("testdir2/testDirName"));
+ testDataBaseDir.mkpath(QStringLiteral("testdir3/testDirName"));
+
+ QFile file1(testBaseDirPath + QLatin1String("/testdir1/testDirName/testfile.test"));
+ file1.open(QFile::WriteOnly);
+ QFile file2(testBaseDirPath + QLatin1String("/testdir2/testDirName/testfile.test"));
+ file2.open(QFile::WriteOnly);
+ QFile file3(testBaseDirPath + QLatin1String("/testdir3/testDirName/differentfile.test"));
+ file3.open(QFile::WriteOnly);
+ QFile file4(testBaseDirPath + QLatin1String("/testdir3/testDirName/nomatch.txt"));
+ file4.open(QFile::WriteOnly);
+
+ qputenv("XDG_DATA_DIRS", qPrintable(QStringLiteral("%1testdir1:%1testdir2:%1testdir3").arg(testBaseDirPath)));
+
+ const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("testDirName"), QStandardPaths::LocateDirectory);
+ const QStringList expected = {testDataBaseDir.filePath(QStringLiteral("testdir1/testDirName/testfile.test")),
+ testDataBaseDir.filePath(QStringLiteral("testdir3/testDirName/differentfile.test"))};
+
+ const QStringList actual = KFileUtils::findAllUniqueFiles(dirs, QStringList{QStringLiteral("*.test")});
+ QCOMPARE(actual, expected);
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ SPDX-FileCopyrightText: 2000-2005 David Faure <faure@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KFILEUTILSTEST_H
+#define KFILEUTILSTEST_H
+
+#include <QObject>
+
+class KFileUtilsTest : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void testSuggestName_data();
+ void testSuggestName();
+ void testfindAllUniqueFiles();
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2013 John Layt <jlayt@kde.org>
+ SPDX-FileCopyrightText: 2010 Michael Leupold <lemma@confuego.org>
+ SPDX-FileCopyrightText: 2009 Michael Pyne <mpyne@kde.org>
+ SPDX-FileCopyrightText: 2008 Albert Astals Cid <aacid@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kformattest.h"
+
+#include <QTest>
+
+#include "kformat.h"
+
+#ifndef Q_OS_WIN
+void ignoreTranslations()
+{
+ qputenv("XDG_DATA_DIRS", "does-not-exist");
+}
+Q_CONSTRUCTOR_FUNCTION(ignoreTranslations)
+#endif
+
+void KFormatTest::formatByteSize()
+{
+ QLocale locale(QLocale::c());
+ locale.setNumberOptions(QLocale::DefaultNumberOptions); // Qt >= 5.6 sets QLocale::OmitGroupSeparator for the C locale
+ KFormat format(locale);
+
+ QCOMPARE(format.formatByteSize(0), QStringLiteral("0 B"));
+ QCOMPARE(format.formatByteSize(50), QStringLiteral("50 B"));
+ QCOMPARE(format.formatByteSize(500), QStringLiteral("500 B"));
+ QCOMPARE(format.formatByteSize(5000), QStringLiteral("4.9 KiB"));
+ QCOMPARE(format.formatByteSize(50000), QStringLiteral("48.8 KiB"));
+ QCOMPARE(format.formatByteSize(500000), QStringLiteral("488.3 KiB"));
+ QCOMPARE(format.formatByteSize(5000000), QStringLiteral("4.8 MiB"));
+ QCOMPARE(format.formatByteSize(50000000), QStringLiteral("47.7 MiB"));
+ QCOMPARE(format.formatByteSize(500000000), QStringLiteral("476.8 MiB"));
+#if (defined(__WORDSIZE) && (__WORDSIZE == 64)) || defined(_LP64) || defined(__LP64__) || defined(__ILP64__)
+ QCOMPARE(format.formatByteSize(5000000000), QStringLiteral("4.7 GiB"));
+ QCOMPARE(format.formatByteSize(50000000000), QStringLiteral("46.6 GiB"));
+ QCOMPARE(format.formatByteSize(500000000000), QStringLiteral("465.7 GiB"));
+ QCOMPARE(format.formatByteSize(5000000000000), QStringLiteral("4.5 TiB"));
+ QCOMPARE(format.formatByteSize(50000000000000), QStringLiteral("45.5 TiB"));
+ QCOMPARE(format.formatByteSize(500000000000000), QStringLiteral("454.7 TiB"));
+#endif
+
+ QCOMPARE(format.formatByteSize(1024.0, 1, KFormat::IECBinaryDialect), QStringLiteral("1.0 KiB"));
+ QCOMPARE(format.formatByteSize(1023.0, 1, KFormat::IECBinaryDialect), QStringLiteral("1,023 B"));
+ QCOMPARE(format.formatByteSize(1163000.0, 1, KFormat::IECBinaryDialect), QStringLiteral("1.1 MiB")); // 1.2 metric
+
+ QCOMPARE(format.formatByteSize(-1024.0, 1, KFormat::IECBinaryDialect), QStringLiteral("-1.0 KiB"));
+ QCOMPARE(format.formatByteSize(-1023.0, 1, KFormat::IECBinaryDialect), QStringLiteral("-1,023 B"));
+ QCOMPARE(format.formatByteSize(-1163000.0, 1, KFormat::IECBinaryDialect), QStringLiteral("-1.1 MiB")); // 1.2 metric
+
+ QCOMPARE(format.formatByteSize(1024.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("1.0 KB"));
+ QCOMPARE(format.formatByteSize(1023.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("1,023 B"));
+ QCOMPARE(format.formatByteSize(1163000.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("1.1 MB"));
+
+ QCOMPARE(format.formatByteSize(-1024.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("-1.0 KB"));
+ QCOMPARE(format.formatByteSize(-1023.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("-1,023 B"));
+ QCOMPARE(format.formatByteSize(-1163000.0, 1, KFormat::JEDECBinaryDialect), QStringLiteral("-1.1 MB"));
+
+ QCOMPARE(format.formatByteSize(1024.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("1.0 kB"));
+ QCOMPARE(format.formatByteSize(1023.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("1.0 kB"));
+ QCOMPARE(format.formatByteSize(1163000.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("1.2 MB"));
+
+ QCOMPARE(format.formatByteSize(-1024.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("-1.0 kB"));
+ QCOMPARE(format.formatByteSize(-1023.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("-1.0 kB"));
+ QCOMPARE(format.formatByteSize(-1163000.0, 1, KFormat::MetricBinaryDialect), QStringLiteral("-1.2 MB"));
+
+ // Ensure all units are represented
+ QCOMPARE(format.formatByteSize(2.0e9, 1, KFormat::MetricBinaryDialect), QStringLiteral("2.0 GB"));
+ QCOMPARE(format.formatByteSize(3.2e12, 1, KFormat::MetricBinaryDialect), QStringLiteral("3.2 TB"));
+ QCOMPARE(format.formatByteSize(4.1e15, 1, KFormat::MetricBinaryDialect), QStringLiteral("4.1 PB"));
+ QCOMPARE(format.formatByteSize(6.7e18, 2, KFormat::MetricBinaryDialect), QStringLiteral("6.70 EB"));
+ QCOMPARE(format.formatByteSize(5.6e20, 2, KFormat::MetricBinaryDialect), QStringLiteral("560.00 EB"));
+ QCOMPARE(format.formatByteSize(2.3e22, 2, KFormat::MetricBinaryDialect), QStringLiteral("23.00 ZB"));
+ QCOMPARE(format.formatByteSize(1.0e27, 1, KFormat::MetricBinaryDialect), QStringLiteral("1,000.0 YB"));
+
+ // Spattering of specific units
+ QCOMPARE(format.formatByteSize(823000, 3, KFormat::IECBinaryDialect, KFormat::UnitMegaByte), QStringLiteral("0.785 MiB"));
+ QCOMPARE(format.formatByteSize(1234034.0, 4, KFormat::JEDECBinaryDialect, KFormat::UnitByte), QStringLiteral("1,234,034 B"));
+
+ // Check examples from the documentation
+ QCOMPARE(format.formatByteSize(1000, 1, KFormat::MetricBinaryDialect, KFormat::UnitKiloByte), QStringLiteral("1.0 kB"));
+ QCOMPARE(format.formatByteSize(1000, 1, KFormat::IECBinaryDialect, KFormat::UnitKiloByte), QStringLiteral("1.0 KiB"));
+ QCOMPARE(format.formatByteSize(1000, 1, KFormat::JEDECBinaryDialect, KFormat::UnitKiloByte), QStringLiteral("1.0 KB"));
+}
+
+void KFormatTest::formatValue()
+{
+ QLocale locale(QLocale::c());
+ locale.setNumberOptions(QLocale::DefaultNumberOptions); // Qt >= 5.6 sets QLocale::OmitGroupSeparator for the C locale
+ KFormat format(locale);
+
+ // Check examples from the documentation
+ QCOMPARE(format.formatValue(1000, KFormat::Unit::Byte, 1, KFormat::UnitPrefix::Kilo, KFormat::MetricBinaryDialect), QStringLiteral("1.0 kB"));
+ QCOMPARE(format.formatValue(1000, KFormat::Unit::Byte, 1, KFormat::UnitPrefix::Kilo, KFormat::IECBinaryDialect), QStringLiteral("1.0 KiB"));
+ QCOMPARE(format.formatValue(1000, KFormat::Unit::Byte, 1, KFormat::UnitPrefix::Kilo, KFormat::JEDECBinaryDialect), QStringLiteral("1.0 KB"));
+
+ // Check examples from the documentation
+ QCOMPARE(format.formatValue(1000, KFormat::Unit::Bit, 1, KFormat::UnitPrefix::Kilo, KFormat::MetricBinaryDialect), QStringLiteral("1.0 kbit"));
+ QCOMPARE(format.formatValue(1000, QStringLiteral("bit"), 1, KFormat::UnitPrefix::Kilo), QStringLiteral("1.0 kbit"));
+ QCOMPARE(format.formatValue(1000, QStringLiteral("bit/s"), 1, KFormat::UnitPrefix::Kilo), QStringLiteral("1.0 kbit/s"));
+
+ QCOMPARE(format.formatValue(100, QStringLiteral("bit/s")), QStringLiteral("100.0 bit/s"));
+ QCOMPARE(format.formatValue(1000, QStringLiteral("bit/s")), QStringLiteral("1.0 kbit/s"));
+ QCOMPARE(format.formatValue(10e3, QStringLiteral("bit/s")), QStringLiteral("10.0 kbit/s"));
+ QCOMPARE(format.formatValue(10e6, QStringLiteral("bit/s")), QStringLiteral("10.0 Mbit/s"));
+
+ QCOMPARE(format.formatValue(0.010, KFormat::Unit::Meter, 1, KFormat::UnitPrefix::Milli, KFormat::MetricBinaryDialect), QStringLiteral("10.0 mm"));
+ QCOMPARE(format.formatValue(10.12e-6, KFormat::Unit::Meter, 2, KFormat::UnitPrefix::Micro, KFormat::MetricBinaryDialect), QString::fromUtf8("10.12 µm"));
+ QCOMPARE(format.formatValue(10.55e-6, KFormat::Unit::Meter, 1, KFormat::UnitPrefix::AutoAdjust, KFormat::MetricBinaryDialect),
+ QString::fromUtf8("10.6 µm"));
+}
+
+enum TimeConstants {
+ MSecsInDay = 86400000,
+ MSecsInHour = 3600000,
+ MSecsInMinute = 60000,
+ MSecsInSecond = 1000,
+};
+
+void KFormatTest::formatDuration()
+{
+ KFormat format(QLocale::c());
+
+ quint64 singleSecond = 3 * MSecsInSecond + 700;
+ quint64 doubleSecond = 33 * MSecsInSecond + 700;
+ quint64 singleMinute = 8 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 doubleMinute = 38 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 singleHour = 5 * MSecsInHour + 8 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 doubleHour = 15 * MSecsInHour + 8 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 singleDay = 1 * MSecsInDay + 5 * MSecsInHour + 8 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 doubleDay = 10 * MSecsInDay + 5 * MSecsInHour + 8 * MSecsInMinute + 3 * MSecsInSecond + 700;
+ quint64 roundingIssues = 2 * MSecsInHour + 59 * MSecsInMinute + 59 * MSecsInSecond + 900;
+ quint64 largeValue = 9999999999;
+
+ // Default format
+ QCOMPARE(format.formatDuration(singleSecond), QStringLiteral("0:00:04"));
+ QCOMPARE(format.formatDuration(doubleSecond), QStringLiteral("0:00:34"));
+ QCOMPARE(format.formatDuration(singleMinute), QStringLiteral("0:08:04"));
+ QCOMPARE(format.formatDuration(doubleMinute), QStringLiteral("0:38:04"));
+ QCOMPARE(format.formatDuration(singleHour), QStringLiteral("5:08:04"));
+ QCOMPARE(format.formatDuration(doubleHour), QStringLiteral("15:08:04"));
+ QCOMPARE(format.formatDuration(singleDay), QStringLiteral("29:08:04"));
+ QCOMPARE(format.formatDuration(doubleDay), QStringLiteral("245:08:04"));
+ QCOMPARE(format.formatDuration(roundingIssues), QStringLiteral("3:00:00"));
+ QCOMPARE(format.formatDuration(largeValue), QStringLiteral("2777:46:40"));
+
+ // ShowMilliseconds format
+ KFormat::DurationFormatOptions options = KFormat::ShowMilliseconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0:00:03.700"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0:00:33.700"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("0:08:03.700"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("0:38:03.700"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("5:08:03.700"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("15:08:03.700"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("29:08:03.700"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("245:08:03.700"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("2:59:59.900"));
+ QCOMPARE(format.formatDuration(largeValue, options), QStringLiteral("2777:46:39.999"));
+
+ // HideSeconds format
+ options = KFormat::HideSeconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0:00"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0:01"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("0:08"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("0:38"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("5:08"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("15:08"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("29:08"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("245:08"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("3:00"));
+ QCOMPARE(format.formatDuration(largeValue, options), QStringLiteral("2777:47"));
+
+ // FoldHours format
+ options = KFormat::FoldHours;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0:04"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0:34"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("8:04"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("38:04"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("308:04"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("908:04"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("1748:04"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("14708:04"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("180:00"));
+ QCOMPARE(format.formatDuration(largeValue, options), QStringLiteral("166666:40"));
+
+ // FoldHours ShowMilliseconds format
+ options = KFormat::FoldHours;
+ options = options | KFormat::ShowMilliseconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0:03.700"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0:33.700"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("8:03.700"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("38:03.700"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("308:03.700"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("908:03.700"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("1748:03.700"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("14708:03.700"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("179:59.900"));
+ QCOMPARE(format.formatDuration(largeValue, options), QStringLiteral("166666:39.999"));
+
+ // InitialDuration format
+ options = KFormat::InitialDuration;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0h00m04s"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0h00m34s"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("0h08m04s"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("0h38m04s"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("5h08m04s"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("15h08m04s"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("29h08m04s"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("245h08m04s"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("3h00m00s"));
+ QCOMPARE(format.formatDuration(largeValue, options), QStringLiteral("2777h46m40s"));
+
+ // InitialDuration and ShowMilliseconds format
+ options = KFormat::InitialDuration;
+ options = options | KFormat::ShowMilliseconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0h00m03.700s"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0h00m33.700s"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("0h08m03.700s"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("0h38m03.700s"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("5h08m03.700s"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("15h08m03.700s"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("29h08m03.700s"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("245h08m03.700s"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("2h59m59.900s"));
+ QCOMPARE(format.formatDuration(largeValue, options), QStringLiteral("2777h46m39.999s"));
+
+ // InitialDuration and HideSeconds format
+ options = KFormat::InitialDuration;
+ options = options | KFormat::HideSeconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0h00m"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0h01m"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("0h08m"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("0h38m"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("5h08m"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("15h08m"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("29h08m"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("245h08m"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("3h00m"));
+ QCOMPARE(format.formatDuration(largeValue, options), QStringLiteral("2777h47m"));
+
+ // InitialDuration and FoldHours format
+ options = KFormat::InitialDuration;
+ options = options | KFormat::FoldHours;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0m04s"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0m34s"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("8m04s"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("38m04s"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("308m04s"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("908m04s"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("1748m04s"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("14708m04s"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("180m00s"));
+ QCOMPARE(format.formatDuration(largeValue, options), QStringLiteral("166666m40s"));
+
+ // InitialDuration and FoldHours and ShowMilliseconds format
+ options = KFormat::InitialDuration;
+ options = options | KFormat::FoldHours | KFormat::ShowMilliseconds;
+ QCOMPARE(format.formatDuration(singleSecond, options), QStringLiteral("0m03.700s"));
+ QCOMPARE(format.formatDuration(doubleSecond, options), QStringLiteral("0m33.700s"));
+ QCOMPARE(format.formatDuration(singleMinute, options), QStringLiteral("8m03.700s"));
+ QCOMPARE(format.formatDuration(doubleMinute, options), QStringLiteral("38m03.700s"));
+ QCOMPARE(format.formatDuration(singleHour, options), QStringLiteral("308m03.700s"));
+ QCOMPARE(format.formatDuration(doubleHour, options), QStringLiteral("908m03.700s"));
+ QCOMPARE(format.formatDuration(singleDay, options), QStringLiteral("1748m03.700s"));
+ QCOMPARE(format.formatDuration(doubleDay, options), QStringLiteral("14708m03.700s"));
+ QCOMPARE(format.formatDuration(roundingIssues, options), QStringLiteral("179m59.900s"));
+ QCOMPARE(format.formatDuration(largeValue, options), QStringLiteral("166666m39.999s"));
+}
+
+void KFormatTest::formatDecimalDuration()
+{
+ KFormat format(QLocale::c());
+
+ QCOMPARE(format.formatDecimalDuration(10), QStringLiteral("10 millisecond(s)"));
+ QCOMPARE(format.formatDecimalDuration(10, 3), QStringLiteral("10 millisecond(s)"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInSecond + 10), QStringLiteral("1.01 seconds"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInSecond + 1, 3), QStringLiteral("1.001 seconds"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInMinute + 10 * MSecsInSecond), QStringLiteral("1.17 minutes"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInMinute + 10 * MSecsInSecond, 3), QStringLiteral("1.167 minutes"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInHour + 10 * MSecsInMinute), QStringLiteral("1.17 hours"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInHour + 10 * MSecsInMinute, 3), QStringLiteral("1.167 hours"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInDay + 10 * MSecsInHour), QStringLiteral("1.42 days"));
+ QCOMPARE(format.formatDecimalDuration(1 * MSecsInDay + 10 * MSecsInHour, 3), QStringLiteral("1.417 days"));
+}
+
+void KFormatTest::formatSpelloutDuration()
+{
+ KFormat format(QLocale::c());
+
+ QCOMPARE(format.formatSpelloutDuration(1000), QStringLiteral("1 second(s)"));
+ QCOMPARE(format.formatSpelloutDuration(5000), QStringLiteral("5 second(s)"));
+ QCOMPARE(format.formatSpelloutDuration(60000), QStringLiteral("1 minute(s)"));
+ QCOMPARE(format.formatSpelloutDuration(300000), QStringLiteral("5 minute(s)"));
+ QCOMPARE(format.formatSpelloutDuration(3600000), QStringLiteral("1 hour(s)"));
+ QCOMPARE(format.formatSpelloutDuration(18000000), QStringLiteral("5 hour(s)"));
+ QCOMPARE(format.formatSpelloutDuration(75000), QStringLiteral("1 minute(s) and 15 second(s)"));
+ // Problematic case #1 (there is a reference to this case on kformat.cpp)
+ QCOMPARE(format.formatSpelloutDuration(119999), QStringLiteral("2 minute(s)"));
+ // This case is strictly 2 hours, 15 minutes and 59 seconds. However, since the range is
+ // pretty high between hours and seconds, formatSpelloutDuration always omits seconds when there
+ // are hours in scene.
+ QCOMPARE(format.formatSpelloutDuration(8159000), QStringLiteral("2 hour(s) and 15 minute(s)"));
+ // This case is strictly 1 hour and 10 seconds. For the same reason, formatSpelloutDuration
+ // detects that 10 seconds is just garbage compared to 1 hour, and omits it on the result.
+ QCOMPARE(format.formatSpelloutDuration(3610000), QStringLiteral("1 hour(s)"));
+}
+
+void KFormatTest::formatRelativeDate()
+{
+ KFormat format(QLocale::c());
+
+ QDate testDate = QDate::currentDate();
+
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Today"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Today"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Today"));
+
+ testDate = QDate::currentDate().addDays(1);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Tomorrow"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Tomorrow"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Tomorrow"));
+
+ testDate = QDate::currentDate().addDays(-1);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Yesterday"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Yesterday"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Yesterday"));
+
+ testDate = QDate::currentDate().addDays(2);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("In two days"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("In two days"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("In two days"));
+
+ testDate = QDate::currentDate().addDays(-2);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Two days ago"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QStringLiteral("Two days ago"));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QStringLiteral("Two days ago"));
+
+ testDate = QDate::currentDate().addDays(-3);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QLocale::c().toString(testDate, QLocale::LongFormat));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QLocale::c().toString(testDate, QLocale::ShortFormat));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QLocale::c().toString(testDate, QLocale::NarrowFormat));
+
+ testDate = QDate::currentDate().addDays(3);
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QLocale::c().toString(testDate, QLocale::LongFormat));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::ShortFormat), QLocale::c().toString(testDate, QLocale::ShortFormat));
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::NarrowFormat), QLocale::c().toString(testDate, QLocale::NarrowFormat));
+
+ testDate = QDate(); // invalid date
+ QCOMPARE(format.formatRelativeDate(testDate, QLocale::LongFormat), QStringLiteral("Invalid date"));
+
+ QDateTime now = QDateTime::currentDateTime();
+
+ // An hour ago is **usually** today, except after midnight; just bump
+ // to after 2am to make the "today" test work.
+ if (now.time().hour() == 0)
+ {
+ now = now.addSecs(7201);
+ }
+
+ QDateTime testDateTime = now.addSecs(-3600);
+ QCOMPARE(format.formatRelativeDateTime(testDateTime, QLocale::ShortFormat), QStringLiteral("Today, %1").arg(testDateTime.toString(QStringLiteral("hh:mm:ss"))));
+
+ // 1 second ago
+ now = QDateTime::currentDateTime();
+ testDateTime = now.addSecs(-1);
+ QCOMPARE(format.formatRelativeDateTime(testDateTime, QLocale::ShortFormat), QStringLiteral("Just now"));
+
+ // 5 minutes ago
+ testDateTime = now.addSecs(-300);
+ QCOMPARE(format.formatRelativeDateTime(testDateTime, QLocale::ShortFormat), QStringLiteral("5 minutes ago"));
+
+ testDateTime = QDateTime(QDate::currentDate().addDays(8), QTime(3, 0, 0));
+ QCOMPARE(format.formatRelativeDateTime(testDateTime, QLocale::LongFormat), QLocale::c().toString(testDateTime, QLocale::LongFormat));
+}
+
+QTEST_MAIN(KFormatTest)
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2013 John Layt <jlayt@kde.org>
+ SPDX-FileCopyrightText: 2010 Michael Leupold <lemma@confuego.org>
+ SPDX-FileCopyrightText: 2009 Michael Pyne <mpyne@kde.org>
+ SPDX-FileCopyrightText: 2008 Albert Astals Cid <aacid@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KFORMATTEST_H
+#define KFORMATTEST_H
+
+#include <QObject>
+
+class KFormatTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+
+ void formatByteSize();
+ void formatDuration();
+ void formatDecimalDuration();
+ void formatSpelloutDuration();
+ void formatRelativeDate();
+ void formatValue();
+};
+
+#endif // KFORMATTEST_H
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#include "kfuzzymatchertest.h"
+
+#include <QString>
+#include <QStringList>
+#include <QTest>
+
+#include <algorithm>
+
+#include "kfuzzymatcher.h"
+
+QTEST_MAIN(KFuzzyMatcherTest)
+
+void KFuzzyMatcherTest::testMatchSimple_data()
+{
+ QTest::addColumn<QString>("pattern");
+ QTest::addColumn<QString>("inputstr");
+ QTest::addColumn<bool>("expected");
+
+ QTest::newRow("AbcD") << QStringLiteral("AbcD") << QStringLiteral("AbCdefg") << true;
+ QTest::newRow("WithSpace") << QStringLiteral("Wa qa") << QStringLiteral("Wa qar") << true;
+ QTest::newRow("RTL") << QStringLiteral("ارو") << QStringLiteral("اردو") << true;
+ QTest::newRow("WithSep") << QStringLiteral("tf") << QStringLiteral("the_file") << true;
+ QTest::newRow("Umlaut") << QStringLiteral("Häu") << QStringLiteral("Häuser") << true;
+ QTest::newRow("Unmatched") << QStringLiteral("Name") << QStringLiteral("Nam") << false;
+ QTest::newRow("Empty Pattern") << QStringLiteral("") << QStringLiteral("Nam") << true;
+}
+
+void KFuzzyMatcherTest::testMatchSimple()
+{
+ QFETCH(QString, pattern);
+ QFETCH(QString, inputstr);
+ QFETCH(bool, expected);
+
+ QVERIFY(KFuzzyMatcher::matchSimple(pattern, inputstr) == expected);
+}
+
+void KFuzzyMatcherTest::testMatch_data()
+{
+ QTest::addColumn<QString>("pattern");
+ QTest::addColumn<QStringList>("input");
+ QTest::addColumn<QStringList>("expected");
+ QTest::addColumn<int>("size");
+ // clang-format off
+ QTest::newRow("pattern=sort") << QStringLiteral("sort")
+ << QStringList{
+ QStringLiteral("Sort"),
+ QStringLiteral("Some other right test"),
+ QStringLiteral("Soup rate"),
+ QStringLiteral("Someother"),
+ QStringLiteral("irrelevant"),
+ }
+ << QStringList{
+ QStringLiteral("Sort"),
+ QStringLiteral("Some other right test"),
+ QStringLiteral("Soup rate"),
+ }
+ << 3;
+
+
+ QTest::newRow("pattern=kateapp") << QStringLiteral("kaapp")
+ << QStringList{
+ QStringLiteral("kateapp.cpp"),
+ QStringLiteral("kate_application"),
+ QStringLiteral("kateapp.h"),
+ QStringLiteral("katepap.c")
+ }
+ << QStringList{
+ QStringLiteral("kate_application"),
+ QStringLiteral("kateapp.h"),
+ QStringLiteral("kateapp.cpp")
+ }
+ << 3;
+
+ QTest::newRow("pattern=this") << QStringLiteral("this")
+ << QStringList{
+ QStringLiteral("th"),
+ QStringLiteral("ths"),
+ QStringLiteral("thsi")
+ }
+ << QStringList{
+ }
+ << 0;
+
+ QTest::newRow("pattern=marath") << QStringLiteral("marath")
+ << QStringList{
+ QStringLiteral("Maralen of the Mornsong"),
+ QStringLiteral("Silumgar, the Drifting Death"),
+ QStringLiteral("Maralen of the Mornsong Avatar"),
+ QStringLiteral("Marshaling the Troops"),
+ QStringLiteral("Homeward Path"),
+ QStringLiteral("Marath, Will of the Wild"),
+ QStringLiteral("Marshal's Anthem"),
+ QStringLiteral("Marchesa, the Black Rose"),
+ QStringLiteral("Mark for Death"),
+ QStringLiteral("Master Apothecary"),
+ QStringLiteral("Mazirek, Kraul Death Priest"),
+ QStringLiteral("Akroma, Angel of Wrath"),
+ QStringLiteral("Akroma, Angel of Wrath Avatar"),
+ QStringLiteral("Commander's Authority"),
+ QStringLiteral("Shaman of the Great Hunt"),
+ QStringLiteral("Halimar Wavewatch"),
+ QStringLiteral("Pyromancer's Swath")
+ }
+ << QStringList{
+ QStringLiteral("Marath, Will of the Wild"),
+ QStringLiteral("Maralen of the Mornsong"),
+ QStringLiteral("Maralen of the Mornsong Avatar"),
+ QStringLiteral("Marshal's Anthem"),
+ QStringLiteral("Marshaling the Troops"),
+ QStringLiteral("Marchesa, the Black Rose"),
+ QStringLiteral("Mark for Death"),
+ QStringLiteral("Master Apothecary"),
+ QStringLiteral("Mazirek, Kraul Death Priest"),
+ QStringLiteral("Akroma, Angel of Wrath"),
+ QStringLiteral("Akroma, Angel of Wrath Avatar"),
+ QStringLiteral("Commander's Authority"),
+ QStringLiteral("Homeward Path"),
+ QStringLiteral("Shaman of the Great Hunt"),
+ QStringLiteral("Halimar Wavewatch"),
+ QStringLiteral("Pyromancer's Swath"),
+ QStringLiteral("Silumgar, the Drifting Death")
+ }
+ << 17;
+
+ // This tests our recursive best match
+ QTest::newRow("pattern=lll") << QStringLiteral("lll")
+ << QStringList{
+ QStringLiteral("SVisualLoggerLogsList.h"),
+ QStringLiteral("SimpleFileLogger.cpp"),
+ QStringLiteral("StringHandlerLogList.txt"),
+ QStringLiteral("LeapFromLostAllan"),
+ QStringLiteral("BumpLLL"),
+ }
+ << QStringList{
+ QStringLiteral("SVisualLoggerLogsList.h"),
+ QStringLiteral("LeapFromLostAllan"),
+ QStringLiteral("BumpLLL"),
+ QStringLiteral("StringHandlerLogList.txt"),
+ QStringLiteral("SimpleFileLogger.cpp"),
+ }
+ << 5;
+
+ QTest::newRow("pattern=") << QStringLiteral("")
+ << QStringList{
+ QStringLiteral("th"),
+ QStringLiteral("ths"),
+ QStringLiteral("thsi")
+ }
+ << QStringList{
+ QStringLiteral("th"),
+ QStringLiteral("ths"),
+ QStringLiteral("thsi")
+ }
+ << 3;
+ // clang-format on
+}
+
+static QStringList matchHelper(const QString &pattern, const QStringList &input)
+{
+ QVector<QPair<QString, int>> actual;
+ for (int i = 0; i < input.size(); ++i) {
+ KFuzzyMatcher::Result res = KFuzzyMatcher::match(pattern, input.at(i));
+ if (res.matched) {
+ actual.push_back({input.at(i), res.score});
+ }
+ }
+
+ // sort descending based on score
+ std::sort(actual.begin(), actual.end(), [](const QPair<QString, int> &l, const QPair<QString, int> &r) {
+ return l.second > r.second;
+ });
+
+ QStringList actualOut;
+ for (const auto &s : actual) {
+ actualOut << s.first;
+ }
+ return actualOut;
+}
+
+void KFuzzyMatcherTest::testMatch()
+{
+ QFETCH(QString, pattern);
+ QFETCH(QStringList, input);
+ QFETCH(QStringList, expected);
+ QFETCH(int, size);
+
+ const QStringList actual = matchHelper(pattern, input);
+
+ QCOMPARE(actual.size(), size);
+ QCOMPARE(actual, expected);
+}
+
+void KFuzzyMatcherTest::testMatchedRanges_data()
+{
+ QTest::addColumn<QString>("pattern");
+ QTest::addColumn<QString>("string");
+
+ using Range = QPair<int, int>;
+ QTest::addColumn<QVector<Range>>("expectedRanges");
+
+ QTest::addColumn<bool>("matchingOnly");
+
+ QTest::newRow("Emtpy") << QStringLiteral("") << QStringLiteral("") << QVector<Range>{} << true;
+ QTest::newRow("Hello") << QStringLiteral("Hlo") << QStringLiteral("Hello") << QVector<Range>{{0, 1}, {3, 2}} << true;
+ QTest::newRow("lll") << QStringLiteral("lll") << QStringLiteral("SVisualLoggerLogsList") << QVector<Range>{{7, 1}, {13, 1}, {17, 1}} << true;
+ QTest::newRow("Sort") << QStringLiteral("sort") << QStringLiteral("SorT") << QVector<Range>{{0, 4}} << true;
+ QTest::newRow("Unmatching") << QStringLiteral("git") << QStringLiteral("gti") << QVector<Range>{} << true;
+ QTest::newRow("UnmatchingWithAllMatches") << QStringLiteral("git") << QStringLiteral("gti") << QVector<Range>{{0, 1}, {2, 1}} << false;
+}
+
+void KFuzzyMatcherTest::testMatchedRanges()
+{
+ QFETCH(QString, pattern);
+ QFETCH(QString, string);
+ QFETCH(bool, matchingOnly);
+ using Range = QPair<int, int>;
+ QFETCH(QVector<Range>, expectedRanges);
+
+ const auto matchMode = matchingOnly ? KFuzzyMatcher::RangeType::FullyMatched : KFuzzyMatcher::RangeType::All;
+
+ auto resultRanges = KFuzzyMatcher::matchedRanges(pattern, string, matchMode);
+ QCOMPARE(resultRanges.size(), expectedRanges.size());
+
+ bool res = std::equal(expectedRanges.begin(), expectedRanges.end(), resultRanges.begin(), [](const Range &l, const KFuzzyMatcher::Range &r) {
+ return l.first == r.start && l.second == r.length;
+ });
+ QVERIFY(res);
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#ifndef KFUZZYMATCHERTEST_H
+#define KFUZZYMATCHERTEST_H
+
+#include <QObject>
+
+class KFuzzyMatcherTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testMatchSimple_data();
+ void testMatchSimple();
+ void testMatch_data();
+ void testMatch();
+ void testMatchedRanges_data();
+ void testMatchedRanges();
+};
+
+#endif // KFUZZYMATCHERTEST_H
--- /dev/null
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2006 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kjobtest.h"
+
+#include <QMetaEnum>
+#include <QSignalSpy>
+#include <QTest>
+#include <QTimer>
+#include <QVector>
+
+#include <string>
+
+QTEST_MAIN(KJobTest)
+
+KJobTest::KJobTest()
+ : loop(this)
+{
+}
+
+void KJobTest::testEmitResult_data()
+{
+ QTest::addColumn<int>("errorCode");
+ QTest::addColumn<QString>("errorText");
+
+ QTest::newRow("no error") << int(KJob::NoError) << QString();
+ QTest::newRow("error no text") << 2 << QString();
+ QTest::newRow("error with text") << 6 << "oops! an error? naaah, really?";
+}
+
+void KJobTest::testEmitResult()
+{
+ TestJob *job = new TestJob;
+
+ connect(job, &KJob::result, this, [this](KJob *job) {
+ slotResult(job);
+ loop.quit();
+ });
+
+ QFETCH(int, errorCode);
+ QFETCH(QString, errorText);
+
+ job->setError(errorCode);
+ job->setErrorText(errorText);
+
+ QSignalSpy destroyed_spy(job, &QObject::destroyed);
+ job->start();
+ QVERIFY(!job->isFinished());
+ loop.exec();
+ QVERIFY(job->isFinished());
+
+ QCOMPARE(m_lastError, errorCode);
+ QCOMPARE(m_lastErrorText, errorText);
+
+ // Verify that the job is not deleted immediately...
+ QCOMPARE(destroyed_spy.size(), 0);
+ QTimer::singleShot(0, &loop, &QEventLoop::quit);
+ // ... but when we enter the event loop again.
+ loop.exec();
+ QCOMPARE(destroyed_spy.size(), 1);
+}
+
+void KJobTest::testProgressTracking()
+{
+ TestJob *testJob = new TestJob;
+ KJob *job = testJob;
+
+ qRegisterMetaType<KJob *>("KJob*");
+ qRegisterMetaType<qulonglong>("qulonglong");
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ QSignalSpy processed_spy(job, QOverload<KJob *, KJob::Unit, qulonglong>::of(&KJob::processedAmount));
+ QSignalSpy total_spy(job, QOverload<KJob *, KJob::Unit, qulonglong>::of(&KJob::totalAmount));
+ QSignalSpy percent_spy(job, QOverload<KJob *, ulong>::of(&KJob::percent));
+#endif
+ QSignalSpy processedChanged_spy(job, &KJob::processedAmountChanged);
+ QSignalSpy totalChanged_spy(job, &KJob::totalAmountChanged);
+ QSignalSpy percentChanged_spy(job, &KJob::percentChanged);
+
+ /* Process a first item. Corresponding signal should be emitted.
+ * Total size didn't change.
+ * Since the total size is unknown, no percent signal is emitted.
+ */
+ testJob->setProcessedSize(1);
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ QCOMPARE(processed_spy.size(), 1);
+ QCOMPARE(processed_spy.at(0).at(0).value<KJob *>(), static_cast<KJob *>(job));
+ QCOMPARE(processed_spy.at(0).at(2).value<qulonglong>(), qulonglong(1));
+ QCOMPARE(total_spy.size(), 0);
+ QCOMPARE(percent_spy.size(), 0);
+#endif
+ QCOMPARE(processedChanged_spy.size(), 1);
+ QCOMPARE(processedChanged_spy.at(0).at(0).value<KJob *>(), static_cast<KJob *>(job));
+ QCOMPARE(processedChanged_spy.at(0).at(2).value<qulonglong>(), qulonglong(1));
+ QCOMPARE(totalChanged_spy.size(), 0);
+ QCOMPARE(percentChanged_spy.size(), 0);
+
+ /* Now, we know the total size. It's signaled.
+ * The new percentage is signaled too.
+ */
+ testJob->setTotalSize(10);
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ QCOMPARE(processed_spy.size(), 1);
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(total_spy.at(0).at(0).value<KJob *>(), job);
+ QCOMPARE(total_spy.at(0).at(2).value<qulonglong>(), qulonglong(10));
+ QCOMPARE(percent_spy.size(), 1);
+ QCOMPARE(percent_spy.at(0).at(0).value<KJob *>(), job);
+ QCOMPARE(percent_spy.at(0).at(1).value<unsigned long>(), static_cast<unsigned long>(10));
+#endif
+ QCOMPARE(processedChanged_spy.size(), 1);
+ QCOMPARE(totalChanged_spy.size(), 1);
+ QCOMPARE(totalChanged_spy.at(0).at(0).value<KJob *>(), job);
+ QCOMPARE(totalChanged_spy.at(0).at(2).value<qulonglong>(), qulonglong(10));
+ QCOMPARE(percentChanged_spy.size(), 1);
+ QCOMPARE(percentChanged_spy.at(0).at(0).value<KJob *>(), job);
+ QCOMPARE(percentChanged_spy.at(0).at(1).value<unsigned long>(), static_cast<unsigned long>(10));
+
+ /* We announce a new percentage by hand.
+ * Total, and processed didn't change, so no signal is emitted for them.
+ */
+ testJob->setPercent(15);
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ QCOMPARE(processed_spy.size(), 1);
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(percent_spy.size(), 2);
+ QCOMPARE(percent_spy.at(1).at(0).value<KJob *>(), job);
+ QCOMPARE(percent_spy.at(1).at(1).value<unsigned long>(), static_cast<unsigned long>(15));
+#endif
+ QCOMPARE(processedChanged_spy.size(), 1);
+ QCOMPARE(totalChanged_spy.size(), 1);
+ QCOMPARE(percentChanged_spy.size(), 2);
+ QCOMPARE(percentChanged_spy.at(1).at(0).value<KJob *>(), job);
+ QCOMPARE(percentChanged_spy.at(1).at(1).value<unsigned long>(), static_cast<unsigned long>(15));
+
+ /* We make some progress.
+ * Processed size and percent are signaled.
+ */
+ testJob->setProcessedSize(3);
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ QCOMPARE(processed_spy.size(), 2);
+ QCOMPARE(processed_spy.at(1).at(0).value<KJob *>(), job);
+ QCOMPARE(processed_spy.at(1).at(2).value<qulonglong>(), qulonglong(3));
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(percent_spy.size(), 3);
+ QCOMPARE(percent_spy.at(2).at(0).value<KJob *>(), job);
+ QCOMPARE(percent_spy.at(2).at(1).value<unsigned long>(), static_cast<unsigned long>(30));
+#endif
+ QCOMPARE(processedChanged_spy.size(), 2);
+ QCOMPARE(processedChanged_spy.at(1).at(0).value<KJob *>(), job);
+ QCOMPARE(processedChanged_spy.at(1).at(2).value<qulonglong>(), qulonglong(3));
+ QCOMPARE(totalChanged_spy.size(), 1);
+ QCOMPARE(percentChanged_spy.size(), 3);
+ QCOMPARE(percentChanged_spy.at(2).at(0).value<KJob *>(), job);
+ QCOMPARE(percentChanged_spy.at(2).at(1).value<unsigned long>(), static_cast<unsigned long>(30));
+
+ /* We set a new total size, but equals to the previous one.
+ * No signal is emitted.
+ */
+ testJob->setTotalSize(10);
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ QCOMPARE(processed_spy.size(), 2);
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(percent_spy.size(), 3);
+#endif
+ QCOMPARE(processedChanged_spy.size(), 2);
+ QCOMPARE(totalChanged_spy.size(), 1);
+ QCOMPARE(percentChanged_spy.size(), 3);
+
+ /* We 'lost' the previous work done.
+ * Signals both percentage and new processed size.
+ */
+ testJob->setProcessedSize(0);
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ QCOMPARE(processed_spy.size(), 3);
+ QCOMPARE(processed_spy.at(2).at(0).value<KJob *>(), job);
+ QCOMPARE(processed_spy.at(2).at(2).value<qulonglong>(), qulonglong(0));
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(percent_spy.size(), 4);
+ QCOMPARE(percent_spy.at(3).at(0).value<KJob *>(), job);
+ QCOMPARE(percent_spy.at(3).at(1).value<unsigned long>(), static_cast<unsigned long>(0));
+#endif
+ QCOMPARE(processedChanged_spy.size(), 3);
+ QCOMPARE(processedChanged_spy.at(2).at(0).value<KJob *>(), job);
+ QCOMPARE(processedChanged_spy.at(2).at(2).value<qulonglong>(), qulonglong(0));
+ QCOMPARE(totalChanged_spy.size(), 1);
+ QCOMPARE(percentChanged_spy.size(), 4);
+ QCOMPARE(percentChanged_spy.at(3).at(0).value<KJob *>(), job);
+ QCOMPARE(percentChanged_spy.at(3).at(1).value<unsigned long>(), static_cast<unsigned long>(0));
+
+ /* We process more than the total size!?
+ * Signals both percentage and new processed size.
+ * Percentage is 150%
+ *
+ * Might sounds weird, but verify that this case is handled gracefully.
+ */
+ testJob->setProcessedSize(15);
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ QCOMPARE(processed_spy.size(), 4);
+ QCOMPARE(processed_spy.at(3).at(0).value<KJob *>(), job);
+ QCOMPARE(processed_spy.at(3).at(2).value<qulonglong>(), qulonglong(15));
+ QCOMPARE(total_spy.size(), 1);
+ QCOMPARE(percent_spy.size(), 5);
+ QCOMPARE(percent_spy.at(4).at(0).value<KJob *>(), job);
+ QCOMPARE(percent_spy.at(4).at(1).value<unsigned long>(), static_cast<unsigned long>(150));
+#endif
+ QCOMPARE(processedChanged_spy.size(), 4);
+ QCOMPARE(processedChanged_spy.at(3).at(0).value<KJob *>(), job);
+ QCOMPARE(processedChanged_spy.at(3).at(2).value<qulonglong>(), qulonglong(15));
+ QCOMPARE(totalChanged_spy.size(), 1);
+ QCOMPARE(percentChanged_spy.size(), 5);
+ QCOMPARE(percentChanged_spy.at(4).at(0).value<KJob *>(), job);
+ QCOMPARE(percentChanged_spy.at(4).at(1).value<unsigned long>(), static_cast<unsigned long>(150));
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ processed_spy.clear();
+ total_spy.clear();
+ percent_spy.clear();
+#endif
+ processedChanged_spy.clear();
+ totalChanged_spy.clear();
+ percentChanged_spy.clear();
+
+ /**
+ * Try again with Files as the progress unit
+ */
+ testJob->setProgressUnit(KJob::Files);
+ testJob->setProcessedSize(16);
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ QCOMPARE(percent_spy.size(), 0); // no impact on percent
+#endif
+ QCOMPARE(percentChanged_spy.size(), 0);
+
+ testJob->setTotalFiles(5);
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ QCOMPARE(percent_spy.size(), 1);
+ QCOMPARE(percent_spy.at(0).at(1).value<unsigned long>(), static_cast<unsigned long>(0));
+#endif
+ QCOMPARE(percentChanged_spy.size(), 1);
+ QCOMPARE(percentChanged_spy.at(0).at(1).value<unsigned long>(), static_cast<unsigned long>(0));
+
+ testJob->setProcessedFiles(2);
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ QCOMPARE(percent_spy.size(), 2);
+ QCOMPARE(percent_spy.at(1).at(1).value<unsigned long>(), static_cast<unsigned long>(40));
+#endif
+ QCOMPARE(percentChanged_spy.size(), 2);
+ QCOMPARE(percentChanged_spy.at(1).at(1).value<unsigned long>(), static_cast<unsigned long>(40));
+
+ delete job;
+}
+
+void KJobTest::testExec_data()
+{
+ QTest::addColumn<int>("errorCode");
+ QTest::addColumn<QString>("errorText");
+
+ QTest::newRow("no error") << int(KJob::NoError) << QString();
+ QTest::newRow("error no text") << 2 << QString();
+ QTest::newRow("error with text") << 6 << "oops! an error? naaah, really?";
+}
+
+void KJobTest::testExec()
+{
+ TestJob *job = new TestJob;
+
+ QFETCH(int, errorCode);
+ QFETCH(QString, errorText);
+
+ job->setError(errorCode);
+ job->setErrorText(errorText);
+
+ int resultEmitted = 0;
+ // Prove to Kai Uwe that one can connect a job to a lambdas, despite the "private" signal
+ connect(job, &KJob::result, this, [&resultEmitted](KJob *) {
+ ++resultEmitted;
+ });
+
+ QSignalSpy destroyed_spy(job, &QObject::destroyed);
+
+ QVERIFY(!job->isFinished());
+ bool status = job->exec();
+ QVERIFY(job->isFinished());
+
+ QCOMPARE(resultEmitted, 1);
+ QCOMPARE(status, (errorCode == KJob::NoError));
+ QCOMPARE(job->error(), errorCode);
+ QCOMPARE(job->errorText(), errorText);
+
+ // Verify that the job is not deleted immediately...
+ QCOMPARE(destroyed_spy.size(), 0);
+ QTimer::singleShot(0, &loop, &QEventLoop::quit);
+ // ... but when we enter the event loop again.
+ loop.exec();
+ QCOMPARE(destroyed_spy.size(), 1);
+}
+
+void KJobTest::testKill_data()
+{
+ QTest::addColumn<int>("killVerbosity");
+ QTest::addColumn<int>("errorCode");
+ QTest::addColumn<QString>("errorText");
+ QTest::addColumn<int>("resultEmitCount");
+ QTest::addColumn<int>("finishedEmitCount");
+
+ QTest::newRow("killed with result") << int(KJob::EmitResult) << int(KJob::KilledJobError) << QString() << 1 << 1;
+ QTest::newRow("killed quietly") << int(KJob::Quietly) << int(KJob::KilledJobError) << QString() << 0 << 1;
+}
+
+void KJobTest::testKill()
+{
+ auto *const job = setupErrorResultFinished();
+ QSignalSpy destroyed_spy(job, &QObject::destroyed);
+
+ QFETCH(int, killVerbosity);
+ QFETCH(int, errorCode);
+ QFETCH(QString, errorText);
+ QFETCH(int, resultEmitCount);
+ QFETCH(int, finishedEmitCount);
+
+ QVERIFY(!job->isFinished());
+ job->kill(static_cast<KJob::KillVerbosity>(killVerbosity));
+ QVERIFY(job->isFinished());
+ loop.processEvents(QEventLoop::AllEvents, 2000);
+
+ QCOMPARE(m_lastError, errorCode);
+ QCOMPARE(m_lastErrorText, errorText);
+
+ QCOMPARE(job->error(), errorCode);
+ QCOMPARE(job->errorText(), errorText);
+
+ QCOMPARE(m_resultCount, resultEmitCount);
+ QCOMPARE(m_finishedCount, finishedEmitCount);
+
+ // Verify that the job is not deleted immediately...
+ QCOMPARE(destroyed_spy.size(), 0);
+ QTimer::singleShot(0, &loop, &QEventLoop::quit);
+ // ... but when we enter the event loop again.
+ loop.exec();
+ QCOMPARE(destroyed_spy.size(), 1);
+
+ QVERIFY(m_jobFinishCount.size() == (finishedEmitCount - resultEmitCount));
+ m_jobFinishCount.clear();
+}
+
+void KJobTest::testDestroy()
+{
+ auto *const job = setupErrorResultFinished();
+ QVERIFY(!job->isFinished());
+ delete job;
+ QCOMPARE(m_lastError, static_cast<int>(KJob::NoError));
+ QCOMPARE(m_lastErrorText, QString{});
+ QCOMPARE(m_resultCount, 0);
+ QCOMPARE(m_finishedCount, 1);
+
+ QVERIFY(m_jobFinishCount.size() == 1);
+ m_jobFinishCount.clear();
+}
+
+void KJobTest::testEmitAtMostOnce_data()
+{
+ QTest::addColumn<bool>("autoDelete");
+ QTest::addColumn<QVector<Action>>("actions");
+
+ const auto actionName = [](Action action) {
+ return QMetaEnum::fromType<Action>().valueToKey(static_cast<int>(action));
+ };
+
+ for (bool autoDelete : {true, false}) {
+ for (Action a : {Action::Start, Action::KillQuietly, Action::KillVerbosely}) {
+ for (Action b : {Action::Start, Action::KillQuietly, Action::KillVerbosely}) {
+ const auto dataTag = std::string{actionName(a)} + '-' + actionName(b) + (autoDelete ? "-autoDelete" : "");
+ QTest::newRow(dataTag.c_str()) << autoDelete << QVector<Action>{a, b};
+ }
+ }
+ }
+}
+
+void KJobTest::testEmitAtMostOnce()
+{
+ auto *const job = setupErrorResultFinished();
+ QSignalSpy destroyed_spy(job, &QObject::destroyed);
+
+ QFETCH(bool, autoDelete);
+ job->setAutoDelete(autoDelete);
+
+ QFETCH(QVector<Action>, actions);
+ for (auto action : actions) {
+ switch (action) {
+ case Action::Start:
+ job->start(); // in effect calls QTimer::singleShot(0, ... emitResult)
+ break;
+ case Action::KillQuietly:
+ QTimer::singleShot(0, job, [=] {
+ job->kill(KJob::Quietly);
+ });
+ break;
+ case Action::KillVerbosely:
+ QTimer::singleShot(0, job, [=] {
+ job->kill(KJob::EmitResult);
+ });
+ break;
+ }
+ }
+
+ QVERIFY(!job->isFinished());
+ loop.processEvents(QEventLoop::AllEvents, 2000);
+ QCOMPARE(destroyed_spy.size(), autoDelete);
+ if (!autoDelete) {
+ QVERIFY(job->isFinished());
+ }
+
+ QVERIFY(!actions.empty());
+ // The first action alone should determine the job's error and result.
+ const auto firstAction = actions.front();
+
+ const int errorCode = firstAction == Action::Start ? KJob::NoError : KJob::KilledJobError;
+ QCOMPARE(m_lastError, errorCode);
+ QCOMPARE(m_lastErrorText, QString{});
+ if (!autoDelete) {
+ QCOMPARE(job->error(), m_lastError);
+ QCOMPARE(job->errorText(), m_lastErrorText);
+ }
+
+ QCOMPARE(m_resultCount, firstAction == Action::KillQuietly ? 0 : 1);
+ QCOMPARE(m_finishedCount, 1);
+
+ if (!autoDelete) {
+ delete job;
+ }
+}
+
+void KJobTest::testDelegateUsage()
+{
+ TestJob *job1 = new TestJob;
+ TestJob *job2 = new TestJob;
+ TestJobUiDelegate *delegate = new TestJobUiDelegate;
+ QPointer<TestJobUiDelegate> guard(delegate);
+
+ QVERIFY(job1->uiDelegate() == nullptr);
+ job1->setUiDelegate(delegate);
+ QVERIFY(job1->uiDelegate() == delegate);
+
+ QVERIFY(job2->uiDelegate() == nullptr);
+ job2->setUiDelegate(delegate);
+ QVERIFY(job2->uiDelegate() == nullptr);
+
+ delete job1;
+ delete job2;
+ QVERIFY(guard.isNull()); // deleted by job1
+}
+
+void KJobTest::testNestedExec()
+{
+ m_innerJob = nullptr;
+ QTimer::singleShot(100, this, &KJobTest::slotStartInnerJob);
+ m_outerJob = new WaitJob();
+ m_outerJob->exec();
+}
+
+void KJobTest::slotStartInnerJob()
+{
+ QTimer::singleShot(100, this, &KJobTest::slotFinishOuterJob);
+ m_innerJob = new WaitJob();
+ m_innerJob->exec();
+}
+
+void KJobTest::slotFinishOuterJob()
+{
+ QTimer::singleShot(100, this, &KJobTest::slotFinishInnerJob);
+ m_outerJob->makeItFinish();
+}
+
+void KJobTest::slotFinishInnerJob()
+{
+ m_innerJob->makeItFinish();
+}
+
+void KJobTest::slotResult(KJob *job)
+{
+ const auto testJob = qobject_cast<const TestJob *>(job);
+ QVERIFY(testJob);
+ QVERIFY(testJob->isFinished());
+
+ // Ensure the job has already emitted finished() if we are tracking from
+ // setupErrorResultFinished
+ if(m_jobFinishCount.contains(job)) {
+ QVERIFY(m_jobFinishCount.value(job) == 1);
+ QVERIFY(m_jobFinishCount.remove(job) == 1 /* num items removed */);
+ }
+
+ if (job->error()) {
+ m_lastError = job->error();
+ m_lastErrorText = job->errorText();
+ } else {
+ m_lastError = KJob::NoError;
+ m_lastErrorText.clear();
+ }
+
+ m_resultCount++;
+}
+
+void KJobTest::slotFinished(KJob *job)
+{
+ QVERIFY2(m_jobFinishCount.value(job) == 0, "Ensure we have not double-emitted KJob::finished()");
+ m_jobFinishCount[job]++;
+
+ if (job->error()) {
+ m_lastError = job->error();
+ m_lastErrorText = job->errorText();
+ } else {
+ m_lastError = KJob::NoError;
+ m_lastErrorText.clear();
+ }
+
+ m_finishedCount++;
+}
+
+TestJob *KJobTest::setupErrorResultFinished()
+{
+ m_lastError = KJob::UserDefinedError;
+ m_lastErrorText.clear();
+ m_resultCount = 0;
+ m_finishedCount = 0;
+
+ auto *job = new TestJob;
+ m_jobFinishCount[job] = 0;
+ connect(job, &KJob::result, this, &KJobTest::slotResult);
+ connect(job, &KJob::finished, this, &KJobTest::slotFinished);
+ return job;
+}
+
+TestJob::TestJob()
+ : KJob()
+{
+}
+
+TestJob::~TestJob()
+{
+}
+
+void TestJob::start()
+{
+ QTimer::singleShot(0, this, [this] {
+ emitResult();
+ });
+}
+
+bool TestJob::doKill()
+{
+ return true;
+}
+
+void TestJob::setError(int errorCode)
+{
+ KJob::setError(errorCode);
+}
+
+void TestJob::setErrorText(const QString &errorText)
+{
+ KJob::setErrorText(errorText);
+}
+
+void TestJob::setProcessedSize(qulonglong size)
+{
+ KJob::setProcessedAmount(KJob::Bytes, size);
+}
+
+void TestJob::setTotalSize(qulonglong size)
+{
+ KJob::setTotalAmount(KJob::Bytes, size);
+}
+
+void TestJob::setProcessedFiles(qulonglong files)
+{
+ KJob::setProcessedAmount(KJob::Files, files);
+}
+
+void TestJob::setTotalFiles(qulonglong files)
+{
+ KJob::setTotalAmount(KJob::Files, files);
+}
+
+void TestJob::setPercent(unsigned long percentage)
+{
+ KJob::setPercent(percentage);
+}
+
+void WaitJob::start()
+{
+}
+
+void WaitJob::makeItFinish()
+{
+ emitResult();
+}
+
+void TestJobUiDelegate::connectJob(KJob *job)
+{
+ QVERIFY(job->uiDelegate() != nullptr);
+}
+
+#include "moc_kjobtest.cpp"
--- /dev/null
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2006 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KJOBTEST_H
+#define KJOBTEST_H
+
+#include "kjob.h"
+#include "kjobuidelegate.h"
+#include <QEventLoop>
+#include <QMap>
+#include <QObject>
+
+class TestJob : public KJob
+{
+ Q_OBJECT
+public:
+ TestJob();
+ ~TestJob() override;
+
+ void start() override;
+ using KJob::isFinished;
+ using KJob::setProgressUnit;
+
+protected:
+ bool doKill() override;
+
+public:
+ void setError(int errorCode);
+ void setErrorText(const QString &errorText);
+ void setProcessedSize(qulonglong size);
+ void setTotalSize(qulonglong size);
+ void setProcessedFiles(qulonglong files);
+ void setTotalFiles(qulonglong files);
+ void setPercent(unsigned long percentage);
+};
+
+class TestJobUiDelegate : public KJobUiDelegate
+{
+ Q_OBJECT
+protected:
+ virtual void connectJob(KJob *job);
+};
+
+class WaitJob;
+
+class KJobTest : public QObject
+{
+ Q_OBJECT
+public:
+ enum class Action {
+ Start,
+ KillQuietly,
+ KillVerbosely,
+ };
+ Q_ENUM(Action)
+
+ KJobTest();
+
+public Q_SLOTS:
+
+ // These slots need to be public, otherwise qtestlib calls them as part of the test
+ void slotStartInnerJob();
+ void slotFinishOuterJob();
+ void slotFinishInnerJob();
+
+private Q_SLOTS:
+ void testEmitResult_data();
+ void testEmitResult();
+ void testProgressTracking();
+ void testExec_data();
+ void testExec();
+ void testKill_data();
+ void testKill();
+ void testDestroy();
+ void testEmitAtMostOnce_data();
+ void testEmitAtMostOnce();
+ void testDelegateUsage();
+ void testNestedExec();
+
+ void slotResult(KJob *job);
+ void slotFinished(KJob *job);
+
+private:
+ TestJob *setupErrorResultFinished();
+
+ QEventLoop loop;
+ int m_lastError;
+ QString m_lastErrorText;
+ int m_resultCount;
+ int m_finishedCount;
+
+ WaitJob *m_outerJob;
+ WaitJob *m_innerJob;
+ QMap<KJob *, int> m_jobFinishCount;
+};
+
+class WaitJob : public KJob
+{
+ Q_OBJECT
+public:
+ void start() override;
+ void makeItFinish();
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "klistopenfilesjobtest_unix.h"
+#include "klistopenfilesjob.h"
+#include <QCoreApplication>
+#include <QStandardPaths>
+#include <QStringLiteral>
+#include <QTemporaryDir>
+#include <QTest>
+#include <algorithm>
+
+QTEST_MAIN(KListOpenFilesJobTest)
+void initLocale()
+{
+ qputenv("LC_ALL", "en_US.utf-8");
+}
+
+Q_CONSTRUCTOR_FUNCTION(initLocale)
+
+namespace
+{
+bool hasLsofInstalled()
+{
+ return !QStandardPaths::findExecutable(QStringLiteral("lsof")).isEmpty();
+}
+
+}
+
+void KListOpenFilesJobTest::testOpenFiles()
+{
+ if (!hasLsofInstalled()) {
+ QSKIP("lsof is not installed - skipping test");
+ }
+ QTemporaryDir tempDir;
+ QFile tempFile(tempDir.path() + QStringLiteral("/file"));
+ QVERIFY(tempFile.open(QIODevice::WriteOnly));
+ auto job = new KListOpenFilesJob(tempDir.path());
+ QVERIFY2(job->exec(), qPrintable(job->errorString()));
+ QCOMPARE(job->error(), KJob::NoError);
+ auto processInfoList = job->processInfoList();
+ QVERIFY(!processInfoList.empty());
+ auto testProcessIterator = std::find_if(processInfoList.begin(), processInfoList.end(), [](const KProcessList::KProcessInfo &info) {
+ return info.pid() == QCoreApplication::applicationPid();
+ });
+ QVERIFY(testProcessIterator != processInfoList.end());
+ const auto &processInfo = *testProcessIterator;
+ QVERIFY(processInfo.isValid());
+ QCOMPARE(processInfo.pid(), QCoreApplication::applicationPid());
+}
+
+void KListOpenFilesJobTest::testNoOpenFiles()
+{
+ if (!hasLsofInstalled()) {
+ QSKIP("lsof is not installed - skipping test");
+ }
+ QTemporaryDir tempDir;
+ auto job = new KListOpenFilesJob(tempDir.path());
+ QVERIFY2(job->exec(), qPrintable(job->errorString()));
+ QCOMPARE(job->error(), KJob::NoError);
+ QVERIFY(job->processInfoList().empty());
+}
+
+void KListOpenFilesJobTest::testNonExistingDir()
+{
+ if (!hasLsofInstalled()) {
+ QSKIP("lsof is not installed - skipping test");
+ }
+ QString nonExistingDir(QStringLiteral("/does/not/exist"));
+ auto job = new KListOpenFilesJob(nonExistingDir);
+ QVERIFY(!job->exec());
+ QCOMPARE(job->error(), static_cast<int>(KListOpenFilesJob::Error::DoesNotExist));
+ QCOMPARE(job->errorText(), QStringLiteral("Path %1 doesn't exist").arg(nonExistingDir));
+ QVERIFY(job->processInfoList().empty());
+}
+
+/**
+ * @brief Helper class to temporarily set an environment variable and reset it on destruction
+ */
+class ScopedEnvVariable
+{
+public:
+ ScopedEnvVariable(const QLatin1String &Name, const QByteArray &NewValue)
+ : name(Name)
+ , originalValue(qgetenv(name.latin1()))
+ {
+ qputenv(name.latin1(), NewValue);
+ }
+ ~ScopedEnvVariable()
+ {
+ qputenv(name.latin1(), originalValue);
+ }
+
+private:
+ const QLatin1String name;
+ const QByteArray originalValue;
+};
+
+void KListOpenFilesJobTest::testLsofNotFound()
+{
+ // This test relies on clearing the PATH variable so that lsof is not found
+ ScopedEnvVariable emptyPathEnvironment(QLatin1String("PATH"), QByteArray());
+ QDir path(QCoreApplication::applicationDirPath());
+ auto job = new KListOpenFilesJob(path.path());
+ QVERIFY(!job->exec());
+ QCOMPARE(job->error(), static_cast<int>(KListOpenFilesJob::Error::InternalError));
+ QVERIFY(job->processInfoList().empty());
+}
--- /dev/null
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KLISTOPENFILESJOBTEST_UNIX_H
+#define KLISTOPENFILESJOBTEST_UNIX_H
+
+#include <QObject>
+
+class KListOpenFilesJobTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testOpenFiles();
+ void testNoOpenFiles();
+ void testNonExistingDir();
+ void testLsofNotFound();
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "klistopenfilesjobtest_win.h"
+#include "klistopenfilesjob.h"
+#include <QCoreApplication>
+#include <QStringLiteral>
+#include <QTest>
+
+QTEST_MAIN(KListOpenFilesJobTest)
+
+void KListOpenFilesJobTest::testNotSupported()
+{
+ QDir path(QCoreApplication::applicationDirPath());
+ auto job = new KListOpenFilesJob(path.path());
+ job->exec();
+ QCOMPARE(job->error(), static_cast<int>(KListOpenFilesJob::Error::NotSupported));
+ QCOMPARE(job->errorText(), QStringLiteral("KListOpenFilesJob is not supported on Windows"));
+ QVERIFY(job->processInfoList().empty());
+}
--- /dev/null
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KLISTOPENFILESJOBTEST_WIN_H
+#define KLISTOPENFILESJOBTEST_WIN_H
+
+#include <QObject>
+
+class KListOpenFilesJobTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testNotSupported();
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ SPDX-FileCopyrightText: 2003, 2008 Oswald Buddenhagen <ossi@kde.org>
+ SPDX-FileCopyrightText: 2005 Thomas Braxton <brax108@cox.net>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include <QTest>
+#include <kmacroexpander.h>
+
+#include <QHash>
+#include <QObject>
+
+class KMacroExpanderTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void expandMacros();
+ void expandMacrosShellQuote();
+ void expandMacrosShellQuoteParens();
+ void expandMacrosSubClass();
+};
+
+class MyCExpander : public KCharMacroExpander
+{
+ QString exp;
+
+public:
+ MyCExpander()
+ : KCharMacroExpander()
+ , exp("expanded")
+ {
+ }
+
+protected:
+ bool expandMacro(QChar ch, QStringList &ret)
+ {
+ if (ch == 'm') {
+ ret = QStringList(exp);
+ return true;
+ }
+ return false;
+ }
+};
+
+class MyWExpander : public KWordMacroExpander
+{
+ QString exp;
+
+public:
+ MyWExpander()
+ : KWordMacroExpander()
+ , exp("expanded")
+ {
+ }
+
+protected:
+ bool expandMacro(const QString &str, QStringList &ret)
+ {
+ if (str == QLatin1String("macro")) {
+ ret = QStringList(exp);
+ return true;
+ }
+ return false;
+ }
+};
+
+void KMacroExpanderTest::expandMacros()
+{
+ QHash<QChar, QStringList> map;
+ QStringList list;
+ QString s;
+
+ list << QString("Restaurant \"Chew It\"");
+ map.insert('n', list);
+ list.clear();
+ list << QString("element1") << QString("'element2'");
+ map.insert('l', list);
+
+ s = "%% text %l text %n";
+ QCOMPARE(KMacroExpander::expandMacros(s, map), QLatin1String("% text element1 'element2' text Restaurant \"Chew It\""));
+ s = "text \"%l %n\" text";
+ QCOMPARE(KMacroExpander::expandMacros(s, map), QLatin1String("text \"element1 'element2' Restaurant \"Chew It\"\" text"));
+
+ QHash<QChar, QString> map2;
+ map2.insert('a', "%n");
+ map2.insert('f', "filename.txt");
+ map2.insert('u', "https://www.kde.org/index.html");
+ map2.insert('n', "Restaurant \"Chew It\"");
+ s = "Title: %a - %f - %u - %n - %%";
+ QCOMPARE(KMacroExpander::expandMacros(s, map2), QLatin1String("Title: %n - filename.txt - https://www.kde.org/index.html - Restaurant \"Chew It\" - %"));
+
+ QHash<QString, QString> smap;
+ smap.insert("foo", "%n");
+ smap.insert("file", "filename.txt");
+ smap.insert("url", "https://www.kde.org/index.html");
+ smap.insert("name", "Restaurant \"Chew It\"");
+
+ s = "Title: %foo - %file - %url - %name - %";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap), QLatin1String("Title: %n - filename.txt - https://www.kde.org/index.html - Restaurant \"Chew It\" - %"));
+ s = "%foo - %file - %url - %name";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap), QLatin1String("%n - filename.txt - https://www.kde.org/index.html - Restaurant \"Chew It\""));
+
+ s = "Title: %{foo} - %{file} - %{url} - %{name} - %";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap), QLatin1String("Title: %n - filename.txt - https://www.kde.org/index.html - Restaurant \"Chew It\" - %"));
+ s = "%{foo} - %{file} - %{url} - %{name}";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap), QLatin1String("%n - filename.txt - https://www.kde.org/index.html - Restaurant \"Chew It\""));
+
+ s = "Title: %foo-%file-%url-%name-%";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap), QLatin1String("Title: %n-filename.txt-https://www.kde.org/index.html-Restaurant \"Chew It\"-%"));
+
+ s = "Title: %{file} %{url";
+ QCOMPARE(KMacroExpander::expandMacros(s, smap), QLatin1String("Title: filename.txt %{url"));
+
+ s = " * Copyright (C) 2008 %{AUTHOR}";
+ smap.clear();
+ QCOMPARE(KMacroExpander::expandMacros(s, smap), QLatin1String(" * Copyright (C) 2008 %{AUTHOR}"));
+}
+
+void KMacroExpanderTest::expandMacrosShellQuote()
+{
+ QHash<QChar, QStringList> map;
+ QStringList list;
+ QString s;
+
+ list << QString("Restaurant \"Chew It\"");
+ map.insert('n', list);
+ list.clear();
+ list << QString("element1") << QString("'element2'") << QString("\"element3\"");
+ map.insert('l', list);
+
+#ifdef Q_OS_WIN
+ s = "text %l %n text";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map),
+ QLatin1String("text element1 'element2' \\^\"element3\\^\" \"Restaurant \"\\^\"\"Chew It\"\\^\" text"));
+
+ s = "text \"%l %n\" text";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map),
+ QLatin1String("text \"element1 'element2' \"\\^\"\"element3\"\\^\"\" Restaurant \"\\^\"\"Chew It\"\\^\"\"\" text"));
+#else
+ s = "text %l %n text";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map), QLatin1String("text element1 ''\\''element2'\\''' '\"element3\"' 'Restaurant \"Chew It\"' text"));
+
+ s = "text \"%l %n\" text";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map), QLatin1String("text \"element1 'element2' \\\"element3\\\" Restaurant \\\"Chew It\\\"\" text"));
+#endif
+
+ QHash<QChar, QString> map2;
+ map2.insert('a', "%n");
+ map2.insert('f', "filename.txt");
+ map2.insert('u', "https://www.kde.org/index.html");
+ map2.insert('n', "Restaurant \"Chew It\"");
+
+#ifdef Q_OS_WIN
+ s = "Title: %a - %f - %u - %n - %% - %VARIABLE% foo";
+ QCOMPARE(
+ KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String(
+ "Title: %PERCENT_SIGN%n - filename.txt - https://www.kde.org/index.html - \"Restaurant \"\\^\"\"Chew It\"\\^\" - %PERCENT_SIGN% - %VARIABLE% foo"));
+
+ s = "kedit --caption %n %f";
+ map2.insert('n', "Restaurant 'Chew It'");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit --caption \"Restaurant 'Chew It'\" filename.txt"));
+
+ s = "kedit --caption \"%n\" %f";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit --caption \"Restaurant 'Chew It'\" filename.txt"));
+
+ map2.insert('n', "Restaurant \"Chew It\"");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit --caption \"Restaurant \"\\^\"\"Chew It\"\\^\"\"\" filename.txt"));
+
+ map2.insert('n', "Restaurant %HOME%");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit --caption \"Restaurant %PERCENT_SIGN%HOME%PERCENT_SIGN%\" filename.txt"));
+
+ s = "kedit c:\\%f";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit c:\\filename.txt"));
+
+ s = "kedit \"c:\\%f\"";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit \"c:\\filename.txt\""));
+
+ map2.insert('f', "\"filename.txt\"");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit \"c:\\\\\"\\^\"\"filename.txt\"\\^\"\"\""));
+
+ map2.insert('f', "path\\");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit \"c:\\path\\\\\"\"\""));
+#else
+ s = "Title: %a - %f - %u - %n - %%";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2),
+ QLatin1String("Title: %n - filename.txt - https://www.kde.org/index.html - 'Restaurant \"Chew It\"' - %"));
+
+ s = "kedit --caption %n %f";
+ map2.insert('n', "Restaurant 'Chew It'");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit --caption 'Restaurant '\\''Chew It'\\''' filename.txt"));
+
+ s = "kedit --caption \"%n\" %f";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit --caption \"Restaurant 'Chew It'\" filename.txt"));
+
+ map2.insert('n', "Restaurant \"Chew It\"");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit --caption \"Restaurant \\\"Chew It\\\"\" filename.txt"));
+
+ map2.insert('n', "Restaurant $HOME");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit --caption \"Restaurant \\$HOME\" filename.txt"));
+
+ map2.insert('n', "Restaurant `echo hello`");
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit --caption \"Restaurant \\`echo hello\\`\" filename.txt"));
+
+ s = "kedit --caption \"`echo %n`\" %f";
+ QCOMPARE(KMacroExpander::expandMacrosShellQuote(s, map2), QLatin1String("kedit --caption \"$( echo 'Restaurant `echo hello`')\" filename.txt"));
+#endif
+}
+
+class DummyMacroExpander : public KMacroExpanderBase
+{
+public:
+ DummyMacroExpander()
+ : KMacroExpanderBase(QChar(0x4567))
+ {
+ }
+
+protected:
+ int expandPlainMacro(const QString &, int, QStringList &)
+ {
+ return 0;
+ }
+ int expandEscapedMacro(const QString &, int, QStringList &)
+ {
+ return 0;
+ }
+};
+
+void KMacroExpanderTest::expandMacrosShellQuoteParens()
+{
+ QHash<QChar, QStringList> map;
+ QStringList list;
+ QString s;
+
+ s = "( echo \"just testing (parens)\" ) ) after";
+ int pos = 0;
+ DummyMacroExpander kmx;
+ QVERIFY(kmx.expandMacrosShellQuote(s, pos));
+ QCOMPARE(s.mid(pos), QLatin1String(") after"));
+ QVERIFY(!kmx.expandMacrosShellQuote(s));
+}
+
+void KMacroExpanderTest::expandMacrosSubClass()
+{
+ QString s;
+
+ MyCExpander mx1;
+ s = "subst %m but not %n equ %%";
+ mx1.expandMacros(s);
+ QCOMPARE(s, QLatin1String("subst expanded but not %n equ %"));
+
+ MyWExpander mx2;
+ s = "subst %macro but not %not equ %%";
+ mx2.expandMacros(s);
+ QCOMPARE(s, QLatin1String("subst expanded but not %not equ %"));
+}
+
+QTEST_MAIN(KMacroExpanderTest)
+
+#include "kmacroexpandertest.moc"
--- /dev/null
+/*
+ This software is a contribution of the LiMux project of the city of Munich.
+ SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "knetworkmountstestcanonical.h"
+
+#include <KNetworkMounts>
+
+#include <QFile>
+#include <QProcess>
+#include <QStandardPaths>
+#include <QTest>
+
+QTEST_MAIN(KNetworkMountsTestCanonical)
+
+void KNetworkMountsTestCanonical::initTestCase()
+{
+ QStandardPaths::setTestModeEnabled(true);
+ m_configFileName = QStringLiteral("%1/network_mounts").arg(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation));
+
+ QFile::remove(m_configFileName);
+ QVERIFY(!QFile::exists(m_configFileName));
+
+ // create directory structure
+ QVERIFY(m_tmpDir.isValid());
+
+ const QString relLinkToPath = QStringLiteral("dir");
+ const QString relSymlinkDirectory = QStringLiteral("symlinkDirectory");
+ const QStringList relPaths = {relLinkToPath,
+ QStringLiteral("dir/subdir1"),
+ QStringLiteral("dir/subdir1/subdir1"),
+ QStringLiteral("dir/subdir1/subdir2"),
+ QStringLiteral("dir/subdir1/subdir3"),
+ QStringLiteral("dir/subdir2"),
+ QStringLiteral("dir/subdir2/subdir1"),
+ QStringLiteral("dir/subdir2/subdir2"),
+ QStringLiteral("dir/subdir2/subdir3"),
+ relSymlinkDirectory};
+
+ const QString relSymlinkToSmbPath = QStringLiteral("symlinkToSmbPath");
+
+ QDir dir(m_tmpDir.path());
+ for (const QString &relPath : relPaths) {
+ QVERIFY(dir.mkpath(relPath));
+ QVERIFY(QFile::exists(m_tmpDir.path() + QLatin1Char('/') + relPath));
+
+ const QString fileName = m_tmpDir.path() + QLatin1Char('/') + relPath + QLatin1String("/file.txt");
+ QFile file(fileName);
+ QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text));
+ file.close();
+ QVERIFY(QFile::exists(fileName));
+ }
+
+ const QString linkToPath = m_tmpDir.path() + QLatin1Char('/') + relLinkToPath;
+
+ // SymlinkToNetworkMount
+ const QString symlinkToSmbPath = dir.path() + QLatin1Char('/') + relSymlinkToSmbPath;
+
+ QVERIFY(QFile::link(linkToPath, symlinkToSmbPath));
+ qDebug() << "linkToPath=" << linkToPath << ", symlinkToSmbPath=" << symlinkToSmbPath;
+
+ // SymlinkDirectory
+ QVERIFY(dir.cd(relSymlinkDirectory));
+ const QString symlinkDirectory = dir.path();
+ const QString linkStr = symlinkDirectory + QLatin1Char('/') + relLinkToPath;
+
+ QVERIFY(QFile::link(linkToPath, linkStr));
+ qDebug() << "linkToPath=" << linkToPath << ", symlinkDirectory=" << symlinkDirectory << ", linkStr=" << linkStr;
+
+ // setup config
+ KNetworkMounts::self()->setEnabled(true);
+
+ const QStringList paths = {linkToPath};
+ KNetworkMounts::self()->setPaths(paths, KNetworkMounts::SmbPaths);
+
+ const QStringList savedPaths = {linkToPath + QLatin1Char('/')};
+ QCOMPARE(KNetworkMounts::self()->paths(), savedPaths);
+
+ // SymlinkDirectory
+ const QStringList symlinkDirectories = {symlinkDirectory};
+ KNetworkMounts::self()->setPaths(symlinkDirectories, KNetworkMounts::SymlinkDirectory);
+
+ const QStringList savedSymlinkDirectories = {symlinkDirectory + QLatin1Char('/')};
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SmbPaths), savedPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkDirectory), savedSymlinkDirectories);
+
+ // SymlinkToNetworkMount
+ // addPath
+ KNetworkMounts::self()->addPath(symlinkToSmbPath, KNetworkMounts::SymlinkToNetworkMount);
+
+ const QString savedSymlinkToSmbPath = symlinkToSmbPath + QLatin1Char('/');
+ const QStringList savedSymlinkToSmbPaths = {savedSymlinkToSmbPath};
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkToNetworkMount), savedSymlinkToSmbPaths);
+
+ // setPaths
+ const QStringList symlinkToSmbPaths = {symlinkToSmbPath};
+ KNetworkMounts::self()->setPaths(symlinkToSmbPaths, KNetworkMounts::SymlinkToNetworkMount);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkToNetworkMount), savedSymlinkToSmbPaths);
+
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SmbPaths), savedPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkDirectory), savedSymlinkDirectories);
+}
+
+void KNetworkMountsTestCanonical::cleanupTestCase()
+{
+ KNetworkMounts::self()->sync();
+ QFile::remove(m_configFileName);
+}
+
+void KNetworkMountsTestCanonical::testCanonicalSymlinkPath_data()
+{
+ QTest::addColumn<QString>("relPath");
+ QTest::addColumn<QString>("symlinkedRelPath");
+
+ // SymlinkDirectory
+ QTest::newRow("symlinkDirectory/dir") << "dir"
+ << "symlinkDirectory/dir";
+ QTest::newRow("symlinkDirectory/dir/file.txt") << "dir/file.txt"
+ << "symlinkDirectory/dir/file.txt";
+ QTest::newRow("symlinkDirectory/dir/subdir1") << "dir/subdir1"
+ << "symlinkDirectory/dir/subdir1";
+ QTest::newRow("symlinkDirectory/dir/subdir1/file.txt") << "dir/subdir1/file.txt"
+ << "symlinkDirectory/dir/subdir1/file.txt";
+ QTest::newRow("symlinkDirectory/dir/subdir1/subdir1") << "dir/subdir1/subdir1"
+ << "symlinkDirectory/dir/subdir1/subdir1";
+ QTest::newRow("symlinkDirectory/dir/subdir1/subdir1/file.txt") << "dir/subdir1/subdir1/file.txt"
+ << "symlinkDirectory/dir/subdir1/subdir1/file.txt";
+ QTest::newRow("symlinkDirectory/dir/subdir1/subdir2") << "dir/subdir1/subdir2"
+ << "symlinkDirectory/dir/subdir1/subdir2";
+ QTest::newRow("symlinkDirectory/dir/subdir1/subdir2/file.txt") << "dir/subdir1/subdir2/file.txt"
+ << "symlinkDirectory/dir/subdir1/subdir2/file.txt";
+ QTest::newRow("symlinkDirectory/dir/subdir1/subdir3") << "dir/subdir1/subdir3"
+ << "symlinkDirectory/dir/subdir1/subdir3";
+ QTest::newRow("symlinkDirectory/dir/subdir1/subdir3/file.txt") << "dir/subdir1/subdir3/file.txt"
+ << "symlinkDirectory/dir/subdir1/subdir3/file.txt";
+ QTest::newRow("symlinkDirectory/dir/subdir2") << "dir/subdir2"
+ << "symlinkDirectory/dir/subdir2";
+ QTest::newRow("symlinkDirectory/dir/subdir2/file.txt") << "dir/subdir2/file.txt"
+ << "symlinkDirectory/dir/subdir2/file.txt";
+ QTest::newRow("symlinkDirectory/dir/subdir2/subdir1") << "dir/subdir2/subdir1"
+ << "symlinkDirectory/dir/subdir2/subdir1";
+ QTest::newRow("symlinkDirectory/dir/subdir2/subdir1/file.txt") << "dir/subdir2/subdir1/file.txt"
+ << "symlinkDirectory/dir/subdir2/subdir1/file.txt";
+ QTest::newRow("symlinkDirectory/dir/subdir2/subdir2") << "dir/subdir2/subdir2"
+ << "symlinkDirectory/dir/subdir2/subdir2";
+ QTest::newRow("symlinkDirectory/dir/subdir2/subdir2/file.txt") << "dir/subdir2/subdir2/file.txt"
+ << "symlinkDirectory/dir/subdir2/subdir2/file.txt";
+ QTest::newRow("symlinkDirectory/dir/subdir2/subdir3") << "dir/subdir2/subdir3"
+ << "symlinkDirectory/dir/subdir2/subdir3";
+ QTest::newRow("symlinkDirectory/dir/subdir2/subdir3/file.txt") << "dir/subdir2/subdir3/file.txt"
+ << "symlinkDirectory/dir/subdir2/subdir3/file.txt";
+ QTest::newRow("symlinkDirectory") << "symlinkDirectory"
+ << "symlinkDirectory";
+ QTest::newRow("symlinkDirectory/file.txt") << "symlinkDirectory/file.txt"
+ << "symlinkDirectory/file.txt";
+
+ // SymlinkToNetworkMount
+ QTest::newRow("symlinkToSmbPath") << "dir"
+ << "symlinkToSmbPath";
+ QTest::newRow("symlinkToSmbPath/file.txt") << "dir/file.txt"
+ << "symlinkToSmbPath/file.txt";
+ QTest::newRow("symlinkToSmbPath/subdir1") << "dir/subdir1"
+ << "symlinkToSmbPath/subdir1";
+ QTest::newRow("symlinkToSmbPath/subdir1/file.txt") << "dir/subdir1/file.txt"
+ << "symlinkToSmbPath/subdir1/file.txt";
+ QTest::newRow("symlinkToSmbPath/subdir1/subdir1") << "dir/subdir1/subdir1"
+ << "symlinkToSmbPath/subdir1/subdir1";
+ QTest::newRow("symlinkToSmbPath/subdir1/subdir1/file.txt") << "dir/subdir1/subdir1/file.txt"
+ << "symlinkToSmbPath/subdir1/subdir1/file.txt";
+ QTest::newRow("symlinkToSmbPath/subdir1/subdir2") << "dir/subdir1/subdir2"
+ << "symlinkToSmbPath/subdir1/subdir2";
+ QTest::newRow("symlinkToSmbPath/subdir1/subdir2/file.txt") << "dir/subdir1/subdir2/file.txt"
+ << "symlinkToSmbPath/subdir1/subdir2/file.txt";
+ QTest::newRow("symlinkToSmbPath/subdir1/subdir3") << "dir/subdir1/subdir3"
+ << "symlinkToSmbPath/subdir1/subdir3";
+ QTest::newRow("symlinkToSmbPath/subdir1/subdir3/file.txt") << "dir/subdir1/subdir3/file.txt"
+ << "symlinkToSmbPath/subdir1/subdir3/file.txt";
+ QTest::newRow("symlinkToSmbPath/subdir2") << "dir/subdir2"
+ << "symlinkToSmbPath/subdir2";
+ QTest::newRow("symlinkToSmbPath/subdir2/file.txt") << "dir/subdir2/file.txt"
+ << "symlinkToSmbPath/subdir2/file.txt";
+ QTest::newRow("symlinkToSmbPath/subdir2/subdir1") << "dir/subdir2/subdir1"
+ << "symlinkToSmbPath/subdir2/subdir1";
+ QTest::newRow("symlinkToSmbPath/subdir2/subdir1/file.txt") << "dir/subdir2/subdir1/file.txt"
+ << "symlinkToSmbPath/subdir2/subdir1/file.txt";
+ QTest::newRow("symlinkToSmbPath/subdir2/subdir2") << "dir/subdir2/subdir2"
+ << "symlinkToSmbPath/subdir2/subdir2";
+ QTest::newRow("symlinkToSmbPath/subdir2/subdir2/file.txt") << "dir/subdir2/subdir2/file.txt"
+ << "symlinkToSmbPath/subdir2/subdir2/file.txt";
+ QTest::newRow("symlinkToSmbPath/subdir2/subdir3") << "dir/subdir2/subdir3"
+ << "symlinkToSmbPath/subdir2/subdir3";
+ QTest::newRow("symlinkToSmbPath/subdir2/subdir3/file.txt") << "dir/subdir2/subdir3/file.txt"
+ << "symlinkToSmbPath/subdir2/subdir3/file.txt";
+}
+
+void KNetworkMountsTestCanonical::testCanonicalSymlinkPath()
+{
+ QFETCH(QString, relPath);
+ QFETCH(QString, symlinkedRelPath);
+
+ const QString path = m_tmpDir.path() + QLatin1Char('/') + relPath;
+ const QString symlinkedPath = m_tmpDir.path() + QLatin1Char('/') + symlinkedRelPath;
+ const QString canonicalPath = QFileInfo(symlinkedPath).canonicalFilePath();
+
+ // default with cache
+ QCOMPARE(KNetworkMounts::self()->canonicalSymlinkPath(symlinkedPath), canonicalPath);
+ QCOMPARE(path, canonicalPath);
+ qDebug() << "path=" << path << ", canonicalPath=" << canonicalPath << ", symlinkedPath=" << symlinkedPath;
+
+ // from cache
+ QCOMPARE(KNetworkMounts::self()->canonicalSymlinkPath(symlinkedPath), canonicalPath);
+
+ // no cache
+ KNetworkMounts::self()->clearCache();
+ QCOMPARE(KNetworkMounts::self()->canonicalSymlinkPath(symlinkedPath), canonicalPath);
+
+ KNetworkMounts::self()->clearCache();
+ KNetworkMounts::self()->setOption(KNetworkMounts::SymlinkPathsUseCache, false);
+ QCOMPARE(KNetworkMounts::self()->canonicalSymlinkPath(symlinkedPath), canonicalPath);
+
+ // with cache
+ KNetworkMounts::self()->setOption(KNetworkMounts::SymlinkPathsUseCache, true);
+ QCOMPARE(KNetworkMounts::self()->canonicalSymlinkPath(symlinkedPath), canonicalPath);
+
+ QCOMPARE(KNetworkMounts::self()->canonicalSymlinkPath(symlinkedPath), canonicalPath);
+}
--- /dev/null
+/*
+ This software is a contribution of the LiMux project of the city of Munich.
+ SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KNETWORKMOUNTSTESTCANONICAL_H
+#define KNETWORKMOUNTSTESTCANONICAL_H
+
+#include <QObject>
+#include <QTemporaryDir>
+
+class KNetworkMountsTestCanonical : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void initTestCase();
+ void cleanupTestCase();
+
+ void testCanonicalSymlinkPath_data();
+ void testCanonicalSymlinkPath();
+
+private:
+ QString m_configFileName;
+ QTemporaryDir m_tmpDir;
+};
+
+#endif
--- /dev/null
+/*
+ This software is a contribution of the LiMux project of the city of Munich.
+ SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "knetworkmountstestnoconfig.h"
+
+#include <KNetworkMounts>
+
+#include <QFile>
+#include <QStandardPaths>
+#include <QTest>
+
+QTEST_MAIN(KNetworkMountsTestNoConfig)
+
+void KNetworkMountsTestNoConfig::initTestCase()
+{
+ QStandardPaths::setTestModeEnabled(true);
+ m_configFileName = QStringLiteral("%1/network_mounts").arg(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation));
+
+ QFile::remove(m_configFileName);
+ QVERIFY(!QFile::exists(m_configFileName));
+}
+
+void KNetworkMountsTestNoConfig::cleanupTestCase()
+{
+ QVERIFY(!QFile::exists(m_configFileName));
+ QVERIFY(!KNetworkMounts::self()->isEnabled());
+
+ KNetworkMounts::self()->sync();
+ QFile::remove(m_configFileName);
+}
+
+void KNetworkMountsTestNoConfig::testNoConfigPathTypes_data()
+{
+ QTest::addColumn<QString>("path");
+ QTest::addColumn<KNetworkMounts::KNetworkMountsType>("type");
+
+ QTest::newRow("NfsPaths/") << "/" << KNetworkMounts::NfsPaths;
+ QTest::newRow("SmbPaths/") << "/" << KNetworkMounts::SmbPaths;
+ QTest::newRow("SymlinkDirectory/") << "/" << KNetworkMounts::SymlinkDirectory;
+ QTest::newRow("SymlinkToNetworkMount/") << "/" << KNetworkMounts::SymlinkToNetworkMount;
+ QTest::newRow("Any/") << "/" << KNetworkMounts::Any;
+
+ QTest::newRow("NfsPaths/mnt") << "/mnt" << KNetworkMounts::NfsPaths;
+ QTest::newRow("SmbPaths/mnt") << "/mnt" << KNetworkMounts::SmbPaths;
+ QTest::newRow("SymlinkDirectory/mnt") << "/mnt" << KNetworkMounts::SymlinkDirectory;
+ QTest::newRow("SymlinkToNetworkMount/mnt") << "/mnt" << KNetworkMounts::SymlinkToNetworkMount;
+ QTest::newRow("Any/mnt") << "/mnt" << KNetworkMounts::Any;
+
+ QTest::newRow("NfsPaths/mnt/") << "/mnt/" << KNetworkMounts::NfsPaths;
+ QTest::newRow("SmbPaths/mnt/") << "/mnt/" << KNetworkMounts::SmbPaths;
+ QTest::newRow("SymlinkDirectory/mnt/") << "/mnt/" << KNetworkMounts::SymlinkDirectory;
+ QTest::newRow("SymlinkToNetworkMount/mnt/") << "/mnt/" << KNetworkMounts::SymlinkToNetworkMount;
+ QTest::newRow("Any/mnt/") << "/mnt/" << KNetworkMounts::Any;
+}
+
+void KNetworkMountsTestNoConfig::testNoConfigPathTypes()
+{
+ QFETCH(QString, path);
+ QFETCH(KNetworkMounts::KNetworkMountsType, type);
+
+ QVERIFY(!QFile::exists(m_configFileName));
+ QVERIFY(!KNetworkMounts::self()->isEnabled());
+
+ QCOMPARE(KNetworkMounts::self()->paths(type), QStringList());
+ QCOMPARE(KNetworkMounts::self()->paths(), QStringList());
+ QCOMPARE(KNetworkMounts::self()->canonicalSymlinkPath(path), path);
+ QVERIFY(!KNetworkMounts::self()->isSlowPath(path, type));
+ QVERIFY(!KNetworkMounts::self()->isSlowPath(path));
+}
+
+void KNetworkMountsTestNoConfig::testNoConfigPathOptions_data()
+{
+ QTest::addColumn<QString>("path");
+ QTest::addColumn<KNetworkMounts::KNetworkMountOption>("option");
+
+ QTest::newRow("LowSideEffectsOptimizations/") << "/" << KNetworkMounts::LowSideEffectsOptimizations;
+ QTest::newRow("MediumSideEffectsOptimizations/") << "/" << KNetworkMounts::MediumSideEffectsOptimizations;
+ QTest::newRow("StrongSideEffectsOptimizations/") << "/" << KNetworkMounts::StrongSideEffectsOptimizations;
+ QTest::newRow("KDirWatchUseINotify/") << "/" << KNetworkMounts::KDirWatchUseINotify;
+ QTest::newRow("KDirWatchDontAddWatches/") << "/" << KNetworkMounts::KDirWatchDontAddWatches;
+ QTest::newRow("SymlinkPathsUseCache/") << "/" << KNetworkMounts::SymlinkPathsUseCache;
+
+ QTest::newRow("LowSideEffectsOptimizations/mnt") << "/mnt" << KNetworkMounts::LowSideEffectsOptimizations;
+ QTest::newRow("MediumSideEffectsOptimizations/mnt") << "/mnt" << KNetworkMounts::MediumSideEffectsOptimizations;
+ QTest::newRow("StrongSideEffectsOptimizations/mnt") << "/mnt" << KNetworkMounts::StrongSideEffectsOptimizations;
+ QTest::newRow("KDirWatchUseINotify/mnt") << "/mnt" << KNetworkMounts::KDirWatchUseINotify;
+ QTest::newRow("KDirWatchDontAddWatches/mnt") << "/mnt" << KNetworkMounts::KDirWatchDontAddWatches;
+ QTest::newRow("SymlinkPathsUseCache/mnt") << "/mnt" << KNetworkMounts::SymlinkPathsUseCache;
+
+ QTest::newRow("LowSideEffectsOptimizations/mnt/") << "/mnt/" << KNetworkMounts::LowSideEffectsOptimizations;
+ QTest::newRow("MediumSideEffectsOptimizations/mnt/") << "/mnt/" << KNetworkMounts::MediumSideEffectsOptimizations;
+ QTest::newRow("StrongSideEffectsOptimizations/mnt/") << "/mnt/" << KNetworkMounts::StrongSideEffectsOptimizations;
+ QTest::newRow("KDirWatchUseINotify/mnt/") << "/mnt/" << KNetworkMounts::KDirWatchUseINotify;
+ QTest::newRow("KDirWatchDontAddWatches/mnt/") << "/mnt/" << KNetworkMounts::KDirWatchDontAddWatches;
+ QTest::newRow("SymlinkPathsUseCache/mnt/") << "/mnt/" << KNetworkMounts::SymlinkPathsUseCache;
+}
+
+void KNetworkMountsTestNoConfig::testNoConfigPathOptions()
+{
+ QFETCH(QString, path);
+ QFETCH(KNetworkMounts::KNetworkMountOption, option);
+
+ QVERIFY(!KNetworkMounts::self()->isOptionEnabledForPath(path, option));
+}
+
+void KNetworkMountsTestNoConfig::testNoConfigOptions_data()
+{
+ QTest::addColumn<KNetworkMounts::KNetworkMountOption>("option");
+ QTest::addColumn<bool>("default_value");
+ QTest::addColumn<bool>("expected_value");
+
+ QTest::newRow("LowSideEffectsOptimizations_false") << KNetworkMounts::LowSideEffectsOptimizations << false << false;
+ QTest::newRow("LowSideEffectsOptimizations_true") << KNetworkMounts::LowSideEffectsOptimizations << true << true;
+
+ QTest::newRow("MediumSideEffectsOptimizationss_false") << KNetworkMounts::MediumSideEffectsOptimizations << false << false;
+ QTest::newRow("MediumSideEffectsOptimizations_true") << KNetworkMounts::MediumSideEffectsOptimizations << true << true;
+
+ QTest::newRow("StrongSideEffectsOptimizations_false") << KNetworkMounts::StrongSideEffectsOptimizations << false << false;
+ QTest::newRow("StrongSideEffectsOptimizationss_true") << KNetworkMounts::StrongSideEffectsOptimizations << true << true;
+
+ QTest::newRow("KDirWatchUseINotify_false") << KNetworkMounts::KDirWatchUseINotify << false << false;
+ QTest::newRow("KDirWatchUseINotifys_true") << KNetworkMounts::KDirWatchUseINotify << true << true;
+
+ QTest::newRow("KDirWatchDontAddWatches_false") << KNetworkMounts::KDirWatchDontAddWatches << false << false;
+ QTest::newRow("KDirWatchDontAddWatches_true") << KNetworkMounts::KDirWatchDontAddWatches << true << true;
+
+ QTest::newRow("SymlinkPathsUseCache_false") << KNetworkMounts::SymlinkPathsUseCache << false << false;
+ QTest::newRow("SymlinkPathsUseCache_true") << KNetworkMounts::SymlinkPathsUseCache << true << true;
+}
+
+void KNetworkMountsTestNoConfig::testNoConfigOptions()
+{
+ QFETCH(KNetworkMounts::KNetworkMountOption, option);
+ QFETCH(bool, default_value);
+ QFETCH(bool, expected_value);
+
+ QCOMPARE(KNetworkMounts::self()->isOptionEnabled(option, default_value), expected_value);
+}
--- /dev/null
+/*
+ This software is a contribution of the LiMux project of the city of Munich.
+ SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KNETWORKMOUNTSTESTNOCONFIG_H
+#define KNETWORKMOUNTSTESTNOCONFIG_H
+
+#include <QObject>
+
+class KNetworkMountsTestNoConfig : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void initTestCase();
+ void cleanupTestCase();
+
+ void testNoConfigPathTypes_data();
+ void testNoConfigPathTypes();
+
+ void testNoConfigPathOptions_data();
+ void testNoConfigPathOptions();
+
+ void testNoConfigOptions_data();
+ void testNoConfigOptions();
+
+private:
+ QString m_configFileName;
+};
+
+#endif
--- /dev/null
+/*
+ This software is a contribution of the LiMux project of the city of Munich.
+ SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "knetworkmountstestpaths.h"
+
+#include <KNetworkMounts>
+
+#include <QFile>
+#include <QStandardPaths>
+#include <QTest>
+
+QTEST_MAIN(KNetworkMountsTestPaths)
+
+void KNetworkMountsTestPaths::initTestCase()
+{
+ QStandardPaths::setTestModeEnabled(true);
+ m_configFileName = QStringLiteral("%1/network_mounts").arg(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation));
+
+ QFile::remove(m_configFileName);
+ QVERIFY(!QFile::exists(m_configFileName));
+
+ KNetworkMounts::self()->setEnabled(true);
+ QVERIFY(KNetworkMounts::self()->isEnabled());
+ KNetworkMounts::self()->sync();
+ QVERIFY(QFile::exists(m_configFileName));
+ QVERIFY(KNetworkMounts::self()->isEnabled());
+
+ // nfs path
+ const QString nfsPath = QStringLiteral("/mnt/nfs");
+ const QString savedNfsPath = QStringLiteral("/mnt/nfs/");
+ const QStringList savedNfsPaths = {savedNfsPath};
+ KNetworkMounts::self()->addPath(nfsPath, KNetworkMounts::NfsPaths);
+
+ QStringList allSavedPaths = savedNfsPaths;
+
+ QCOMPARE(KNetworkMounts::self()->paths(), allSavedPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SmbPaths), QStringList());
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::NfsPaths), savedNfsPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkDirectory), QStringList());
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkToNetworkMount), QStringList());
+
+ // smb shares
+ const QStringList paths = {QStringLiteral("/mnt/server1"), QStringLiteral("/mnt/server2")};
+ const QStringList savedSmbPaths = {QStringLiteral("/mnt/server1/"), QStringLiteral("/mnt/server2/")};
+ KNetworkMounts::self()->setPaths(paths, KNetworkMounts::SmbPaths);
+
+ allSavedPaths << savedSmbPaths;
+
+ QCOMPARE(KNetworkMounts::self()->paths(), allSavedPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SmbPaths), savedSmbPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::NfsPaths), savedNfsPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkDirectory), QStringList());
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkToNetworkMount), QStringList());
+
+ // symlink dir
+ const QStringList symlinkDirs = {QStringLiteral("/home/user/netshares")};
+ const QStringList savedSymlinkDirs = {QStringLiteral("/home/user/netshares/")};
+ KNetworkMounts::self()->setPaths(symlinkDirs, KNetworkMounts::SymlinkDirectory);
+
+ allSavedPaths << savedSymlinkDirs;
+
+ QCOMPARE(KNetworkMounts::self()->paths(), allSavedPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SmbPaths), savedSmbPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkDirectory), savedSymlinkDirs);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::NfsPaths), savedNfsPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkToNetworkMount), QStringList());
+
+ // symlink to nfs or smb
+ const QString symlinkToNfs = QStringLiteral("/somedir/symlinkToNfs");
+ const QString savedSymlinkToNfs = QStringLiteral("/somedir/symlinkToNfs/");
+ const QStringList savedSymlinkToNfsPaths = {savedSymlinkToNfs};
+ KNetworkMounts::self()->addPath(symlinkToNfs, KNetworkMounts::SymlinkToNetworkMount);
+
+ allSavedPaths << savedSymlinkToNfsPaths;
+
+ QCOMPARE(KNetworkMounts::self()->paths(), allSavedPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SmbPaths), savedSmbPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkDirectory), savedSymlinkDirs);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::NfsPaths), savedNfsPaths);
+ QCOMPARE(KNetworkMounts::self()->paths(KNetworkMounts::SymlinkToNetworkMount), savedSymlinkToNfsPaths);
+}
+
+void KNetworkMountsTestPaths::cleanupTestCase()
+{
+ KNetworkMounts::self()->sync();
+ QFile::remove(m_configFileName);
+}
+
+void KNetworkMountsTestPaths::testPaths_data()
+{
+ QTest::addColumn<QString>("path");
+ QTest::addColumn<bool>("expected_path_option");
+ QTest::addColumn<bool>("expected_path");
+ QTest::addColumn<bool>("expected_symlink_dir");
+ QTest::addColumn<bool>("expected_symlink_to_nfs_or_smb");
+ QTest::addColumn<bool>("expected_nfs");
+ QTest::addColumn<bool>("expected_smb");
+
+ QTest::newRow("fast_path") << "/mnt" << false << false << false << false << false << false;
+ QTest::newRow("fast_path_slash_end") << "/mnt/" << false << false << false << false << false << false;
+ QTest::newRow("slow_path1") << "/mnt/server1" << true << true << false << false << false << true;
+ QTest::newRow("slow_path2") << "/mnt/server2" << true << true << false << false << false << true;
+ QTest::newRow("slow_path2_dir") << "/mnt/server2/dir" << true << true << false << false << false << true;
+ QTest::newRow("slow_path2_dir_subdir") << "/mnt/server2/dir/subdir" << true << true << false << false << false << true;
+ QTest::newRow("slow_path2_dir_subdir_slash_end") << "/mnt/server2/dir/subdir/" << true << true << false << false << false << true;
+ QTest::newRow("slow_symlink_path") << "/home/user/netshares" << true << true << true << false << false << false;
+ QTest::newRow("fast_path_root") << "/" << false << false << false << false << false << false;
+ QTest::newRow("fast_path_home") << "/home" << false << false << false << false << false << false;
+ QTest::newRow("fast_path_home_user") << "/home/user" << false << false << false << false << false << false;
+ QTest::newRow("slow_symlink_path_subdir1") << "/home/user/netshares/subdir1" << true << true << true << false << false << false;
+ QTest::newRow("slow_symlink_path_subdir1_subdir2") << "/home/user/netshares/subdir1/subdir2" << true << true << true << false << false << false;
+ QTest::newRow("slow_symlink_path_subdir1_subdir2_slash_end") << "/home/user/netshares/subdir1/subdir2/" << true << true << true << false << false << false;
+ QTest::newRow("slow_path_nfs") << "/mnt/nfs" << true << true << false << false << true << false;
+ QTest::newRow("slow_path_nfs_dir") << "/mnt/nfs/dir" << true << true << false << false << true << false;
+ QTest::newRow("slow_path_nfs_dir_subdir") << "/mnt/nfs/dir/subdir" << true << true << false << false << true << false;
+ QTest::newRow("slow_path_nfs_dir_subdir_slash_end") << "/mnt/nfs/dir/subdir/" << true << true << false << false << true << false;
+ QTest::newRow("slow_path_symlink_to_nfs") << "/somedir/symlinkToNfs" << true << true << false << true << false << false;
+ QTest::newRow("slow_path_symlink_to_nfs_dir") << "/somedir/symlinkToNfs/dir" << true << true << false << true << false << false;
+ QTest::newRow("slow_path_symlink_to_nfs_dir_subdir") << "/somedir/symlinkToNfs/dir/subdir" << true << true << false << true << false << false;
+ QTest::newRow("slow_path_symlink_to_nfs_dir_subdir_slash_end") << "/somedir/symlinkToNfs/dir/subdir/" << true << true << false << true << false << false;
+}
+
+void KNetworkMountsTestPaths::testPaths()
+{
+ QFETCH(QString, path);
+ QFETCH(bool, expected_path_option);
+ QFETCH(bool, expected_path);
+ QFETCH(bool, expected_symlink_dir);
+ QFETCH(bool, expected_symlink_to_nfs_or_smb);
+ QFETCH(bool, expected_nfs);
+ QFETCH(bool, expected_smb);
+
+ QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::SymlinkPathsUseCache), expected_path_option);
+ QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::KDirWatchUseINotify), expected_path_option);
+ QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::KDirWatchDontAddWatches), expected_path_option);
+ QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::LowSideEffectsOptimizations), expected_path_option);
+ QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::MediumSideEffectsOptimizations), expected_path_option);
+ QCOMPARE(KNetworkMounts::self()->isOptionEnabledForPath(path, KNetworkMounts::StrongSideEffectsOptimizations), expected_path_option);
+
+ QCOMPARE(KNetworkMounts::self()->isSlowPath(path), expected_path);
+
+ QCOMPARE(KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::KNetworkMountsType::Any), expected_path);
+
+ QCOMPARE(KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::SymlinkDirectory), expected_symlink_dir);
+
+ QCOMPARE(KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::SymlinkToNetworkMount), expected_symlink_to_nfs_or_smb);
+
+ QCOMPARE(KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::NfsPaths), expected_nfs);
+
+ QCOMPARE(KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::SmbPaths), expected_smb);
+}
--- /dev/null
+/*
+ This software is a contribution of the LiMux project of the city of Munich.
+ SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KNETWORKMOUNTSTESTPATHS_H
+#define KNETWORKMOUNTSTESTPATHS_H
+
+#include <QObject>
+
+class KNetworkMountsTestPaths : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void initTestCase();
+ void cleanupTestCase();
+
+ void testPaths_data();
+ void testPaths();
+
+private:
+ QString m_configFileName;
+};
+
+#endif
--- /dev/null
+/*
+ This software is a contribution of the LiMux project of the city of Munich.
+ SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "knetworkmountsteststatic.h"
+
+// include static functions
+#include "knetworkmounts_p.h"
+
+#include <KNetworkMounts>
+
+#include <QFile>
+#include <QStandardPaths>
+#include <QTest>
+
+QTEST_MAIN(KNetworkMountsTestStatic)
+
+void KNetworkMountsTestStatic::testStaticFunctions_data()
+{
+ QTest::addColumn<QString>("path");
+ QTest::addColumn<QStringList>("paths");
+ QTest::addColumn<bool>("expected_is_slash_added_to_path");
+ QTest::addColumn<QString>("expected_path_str");
+ QTest::addColumn<bool>("expected_is_slash_added_to_paths");
+ QTest::addColumn<QStringList>("expected_paths_str");
+ QTest::addColumn<QString>("expected_matching");
+
+ QTest::newRow("empty1") << QString() << QStringList() << false << "" << false << QStringList() << QString();
+ QTest::newRow("empty2") << "" << (QStringList() << QString() << QString()) << false << "" << false << (QStringList() << QString() << QString())
+ << QString();
+
+ QTest::newRow("/1") << "/" << QStringList() << false << "/" << false << QStringList() << QString();
+ QTest::newRow("/2") << "/" << (QStringList() << QString() << QString()) << false << "/" << false << (QStringList() << QString() << QString()) << QString();
+ QTest::newRow("/3") << "/" << (QStringList() << QStringLiteral("/")) << false << "/" << false << (QStringList() << QStringLiteral("/")) << "/";
+ QTest::newRow("/4") << "/" << (QStringList() << QStringLiteral("/") << QString()) << false << "/" << false
+ << (QStringList() << QStringLiteral("/") << QString()) << "/";
+
+ QTest::newRow("/mnt1") << "/mnt" << QStringList() << true << "/mnt/" << false << QStringList() << QString();
+ QTest::newRow("/mnt2") << "/mnt" << (QStringList() << QStringLiteral("/mnt")) << true << "/mnt/" << true << (QStringList() << QStringLiteral("/mnt/"))
+ << "/mnt";
+ QTest::newRow("/mnt3") << "/mnt" << (QStringList() << QStringLiteral("/mnt/")) << true << "/mnt/" << false << (QStringList() << QStringLiteral("/mnt/"))
+ << "/mnt/";
+
+ QTest::newRow("/mnt/test1") << "/mnt" << (QStringList() << QStringLiteral("/mnt/test1") << QStringLiteral("/mnt/test2/")) << true << "/mnt/" << true
+ << (QStringList() << QStringLiteral("/mnt/test1/") << QStringLiteral("/mnt/test2/")) << "";
+ QTest::newRow("/mnt/test2") << "/mnt/test2" << (QStringList() << QStringLiteral("/mnt/test1/") << QStringLiteral("/mnt/test2/")) << true << "/mnt/test2/"
+ << false << (QStringList() << QStringLiteral("/mnt/test1/") << QStringLiteral("/mnt/test2/")) << "/mnt/test2/";
+ QTest::newRow("/mnt/test3") << "/mnt/test2/" << (QStringList() << QStringLiteral("/mnt/test1/") << QStringLiteral("/mnt/test2/")) << false << "/mnt/test2/"
+ << false << (QStringList() << QStringLiteral("/mnt/test1/") << QStringLiteral("/mnt/test2/")) << "/mnt/test2/";
+}
+
+void KNetworkMountsTestStatic::testStaticFunctions()
+{
+ QFETCH(QString, path);
+ QFETCH(QStringList, paths);
+ QFETCH(bool, expected_is_slash_added_to_path);
+ QFETCH(QString, expected_path_str);
+ QFETCH(bool, expected_is_slash_added_to_paths);
+ QFETCH(QStringList, expected_paths_str);
+ QFETCH(QString, expected_matching);
+
+ QCOMPARE(getMatchingPath(path, paths), expected_matching);
+
+ QCOMPARE(ensureTrailingSlash(&path), expected_is_slash_added_to_path);
+ QCOMPARE(path, expected_path_str);
+ QCOMPARE(ensureTrailingSlashes(&paths), expected_is_slash_added_to_paths);
+ QCOMPARE(paths, expected_paths_str);
+}
+
+void KNetworkMountsTestStatic::testStaticKNetworkMountOptionToString_data()
+{
+ QTest::addColumn<KNetworkMounts::KNetworkMountOption>("option");
+ QTest::addColumn<QString>("string");
+
+ QTest::newRow("LowSideEffectsOptimizations") << KNetworkMounts::LowSideEffectsOptimizations << "LowSideEffectsOptimizations";
+ QTest::newRow("MediumSideEffectsOptimizations") << KNetworkMounts::MediumSideEffectsOptimizations << "MediumSideEffectsOptimizations";
+ QTest::newRow("StrongSideEffectsOptimizations") << KNetworkMounts::StrongSideEffectsOptimizations << "StrongSideEffectsOptimizations";
+ QTest::newRow("KDirWatchUseINotify") << KNetworkMounts::KDirWatchUseINotify << "KDirWatchUseINotify";
+ QTest::newRow("KDirWatchDontAddWatches") << KNetworkMounts::KDirWatchDontAddWatches << "KDirWatchDontAddWatches";
+ QTest::newRow("SymlinkPathsUseCache") << KNetworkMounts::SymlinkPathsUseCache << "SymlinkPathsUseCache";
+}
+void KNetworkMountsTestStatic::testStaticKNetworkMountOptionToString()
+{
+ QFETCH(KNetworkMounts::KNetworkMountOption, option);
+ QFETCH(QString, string);
+
+ QCOMPARE(enumToString(option), string);
+}
+
+void KNetworkMountsTestStatic::testStaticKNetworkMountsTypeToString_data()
+{
+ QTest::addColumn<KNetworkMounts::KNetworkMountsType>("type");
+ QTest::addColumn<QString>("string");
+
+ QTest::newRow("NfsPaths") << KNetworkMounts::NfsPaths << "NfsPaths";
+ QTest::newRow("SmbPaths") << KNetworkMounts::SmbPaths << "SmbPaths";
+ QTest::newRow("SymlinkDirectory") << KNetworkMounts::SymlinkDirectory << "SymlinkDirectory";
+ QTest::newRow("SymlinkToNetworkMount") << KNetworkMounts::SymlinkToNetworkMount << "SymlinkToNetworkMount";
+ QTest::newRow("Any") << KNetworkMounts::Any << "Any";
+}
+void KNetworkMountsTestStatic::testStaticKNetworkMountsTypeToString()
+{
+ QFETCH(KNetworkMounts::KNetworkMountsType, type);
+ QFETCH(QString, string);
+
+ QCOMPARE(enumToString(type), string);
+}
--- /dev/null
+/*
+ This software is a contribution of the LiMux project of the city of Munich.
+ SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KNETWORKMOUNTSTESTSTATIC_H
+#define KNETWORKMOUNTSTESTSTATIC_H
+
+#include <QObject>
+
+class KNetworkMountsTestStatic : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void testStaticFunctions_data();
+ void testStaticFunctions();
+ void testStaticKNetworkMountOptionToString_data();
+ void testStaticKNetworkMountOptionToString();
+ void testStaticKNetworkMountsTypeToString_data();
+ void testStaticKNetworkMountsTypeToString();
+private:
+ QString m_configFileName;
+};
+
+#endif
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014-2019 Harald Sitter <sitter@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include <QTest>
+
+#include "kosrelease.h"
+
+class KOSReleaseTest : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void testParse()
+ {
+ KOSRelease r(QFINDTESTDATA("data/os-release"));
+ QCOMPARE(r.name(), QStringLiteral("Name"));
+ QCOMPARE(r.version(), QStringLiteral("100.5"));
+ QCOMPARE(r.id(), QStringLiteral("theid"));
+ QCOMPARE(r.idLike(), QStringList({QStringLiteral("otherid"), QStringLiteral("otherotherid")}));
+ QCOMPARE(r.versionCodename(), QStringLiteral("versioncodename"));
+ QCOMPARE(r.versionId(), QStringLiteral("500.1"));
+ QCOMPARE(r.prettyName(), QStringLiteral("Pretty Name #1"));
+ QCOMPARE(r.ansiColor(), QStringLiteral("1;34"));
+ QCOMPARE(r.cpeName(), QStringLiteral("cpe:/o:foo:bar:100"));
+ QCOMPARE(r.homeUrl(), QStringLiteral("https://url.home"));
+ QCOMPARE(r.documentationUrl(), QStringLiteral("https://url.docs"));
+ QCOMPARE(r.supportUrl(), QStringLiteral("https://url.support"));
+ QCOMPARE(r.bugReportUrl(), QStringLiteral("https://url.bugs"));
+ QCOMPARE(r.privacyPolicyUrl(), QStringLiteral("https://url.privacy"));
+ QCOMPARE(r.buildId(), QStringLiteral("105.5"));
+ QCOMPARE(r.variant(), QStringLiteral("Test = Edition"));
+ QCOMPARE(r.variantId(), QStringLiteral("test"));
+ QCOMPARE(r.logo(), QStringLiteral("start-here-test"));
+ QCOMPARE(r.extraKeys(), QStringList({QStringLiteral("DEBIAN_BTS")}));
+ QCOMPARE(r.extraValue(QStringLiteral("DEBIAN_BTS")), QStringLiteral("debbugs://bugs.debian.org/"));
+ }
+};
+
+QTEST_MAIN(KOSReleaseTest)
+
+#include "kosreleasetest.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014 Alex Merry <alex.merry@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include <QTest>
+
+#include <kpluginfactory.h>
+#include <kpluginloader.h>
+
+class KPluginFactoryTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testCreate()
+ {
+ KPluginLoader multiplugin(QStringLiteral("multiplugin"));
+ KPluginFactory *factory = multiplugin.factory();
+ QVERIFY(factory);
+ QVariantList args;
+ args << QStringLiteral("Some") << QStringLiteral("args") << 5;
+
+ QObject *obj = factory->create<QObject>(this, args);
+ QVERIFY(obj);
+ QCOMPARE(obj->objectName(), QString::fromLatin1("MultiPlugin1"));
+
+ QObject *obj2 = factory->create<QObject>(this, args);
+ QVERIFY(obj2);
+ QCOMPARE(obj2->objectName(), QString::fromLatin1("MultiPlugin1"));
+ QVERIFY(obj != obj2);
+ delete obj;
+ delete obj2;
+
+ obj = factory->create<QObject>(QStringLiteral("secondary"), this, args);
+ QVERIFY(obj);
+ QCOMPARE(obj->objectName(), QString::fromLatin1("MultiPlugin2"));
+
+ obj2 = factory->create<QObject>(QStringLiteral("secondary"), this, args);
+ QVERIFY(obj2);
+ QCOMPARE(obj2->objectName(), QString::fromLatin1("MultiPlugin2"));
+ QVERIFY(obj != obj2);
+ delete obj;
+ delete obj2;
+ }
+};
+
+QTEST_MAIN(KPluginFactoryTest)
+
+#include "kpluginfactorytest.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014 Alex Merry <alex.merry@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include <QFileInfo>
+#include <QTest>
+
+#include "kcoreaddons_debug.h"
+#include <kpluginloader.h>
+#include <kpluginmetadata.h>
+
+class LibraryPathRestorer
+{
+public:
+ explicit LibraryPathRestorer(const QStringList &paths)
+ : mPaths(paths)
+ {
+ }
+ ~LibraryPathRestorer()
+ {
+ QCoreApplication::setLibraryPaths(mPaths);
+ }
+
+private:
+ QStringList mPaths;
+};
+
+class KPluginLoaderTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testFindPlugin_missing()
+ {
+ const QString location = KPluginLoader::findPlugin(QStringLiteral("idonotexist"));
+ QVERIFY2(location.isEmpty(), qPrintable(location));
+ }
+
+ void testFindPlugin()
+ {
+ const QString location = KPluginLoader::findPlugin(QStringLiteral("jsonplugin"));
+ QVERIFY2(!location.isEmpty(), qPrintable(location));
+ }
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 84)
+ void testPluginVersion()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QCOMPARE(vplugin.pluginVersion(), quint32(5));
+
+ KPluginLoader vplugin2(QStringLiteral("versionedplugin"));
+ QCOMPARE(vplugin2.pluginVersion(), quint32(5));
+
+ KPluginLoader uplugin(QStringLiteral("unversionedplugin"));
+ QCOMPARE(uplugin.pluginVersion(), quint32(-1));
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QCOMPARE(jplugin.pluginVersion(), quint32(-1));
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QCOMPARE(eplugin.pluginVersion(), quint32(-1));
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QCOMPARE(noplugin.pluginVersion(), quint32(-1));
+ }
+#endif
+
+ void testPluginName()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QCOMPARE(vplugin.pluginName(), QString::fromLatin1("versionedplugin"));
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QCOMPARE(jplugin.pluginName(), QString::fromLatin1("jsonplugin"));
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY2(eplugin.pluginName().isEmpty(), qPrintable(eplugin.pluginName()));
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QCOMPARE(noplugin.pluginName(), QString::fromLatin1("idonotexist"));
+ }
+
+ void testFactory()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QVERIFY(vplugin.factory());
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QVERIFY(jplugin.factory());
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY(!eplugin.factory());
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY(!noplugin.factory());
+ }
+
+ void testErrorString()
+ {
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QCOMPARE(eplugin.errorString(), QString::fromLatin1("there was an error"));
+ }
+
+ void testFileName()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QCOMPARE(QFileInfo(vplugin.fileName()).canonicalFilePath(), QFileInfo(QStringLiteral(VERSIONEDPLUGIN_FILE)).canonicalFilePath());
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QCOMPARE(QFileInfo(jplugin.fileName()).canonicalFilePath(), QFileInfo(QStringLiteral(JSONPLUGIN_FILE)).canonicalFilePath());
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY2(eplugin.fileName().isEmpty(), qPrintable(eplugin.fileName()));
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY2(noplugin.fileName().isEmpty(), qPrintable(noplugin.fileName()));
+ }
+
+ void testInstance()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QVERIFY(vplugin.instance());
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QVERIFY(jplugin.instance());
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY(!eplugin.instance());
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY(!noplugin.instance());
+ }
+
+ void testIsLoaded()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QVERIFY(!vplugin.isLoaded());
+ QVERIFY(vplugin.load());
+ QVERIFY(vplugin.isLoaded());
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QVERIFY(!jplugin.isLoaded());
+ QVERIFY(jplugin.load());
+ QVERIFY(jplugin.isLoaded());
+
+ KPluginLoader aplugin(QStringLiteral("alwaysunloadplugin"));
+ QVERIFY(!aplugin.isLoaded());
+ QVERIFY(aplugin.load());
+ QVERIFY(aplugin.isLoaded());
+ if (aplugin.unload()) {
+ QVERIFY(!aplugin.isLoaded());
+ } else {
+ qCDebug(KCOREADDONS_DEBUG) << "Could not unload alwaysunloadplugin:" << aplugin.errorString();
+ }
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY(!eplugin.isLoaded());
+ QVERIFY(!eplugin.load());
+ QVERIFY(!eplugin.isLoaded());
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY(!noplugin.isLoaded());
+ QVERIFY(!noplugin.load());
+ QVERIFY(!noplugin.isLoaded());
+ }
+
+ void testLoad()
+ {
+ KPluginLoader vplugin(QStringLiteral("versionedplugin"));
+ QVERIFY(vplugin.load());
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QVERIFY(jplugin.load());
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY(!eplugin.load());
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY(!noplugin.load());
+ }
+
+ void testLoadHints()
+ {
+ KPluginLoader aplugin(QStringLiteral("alwaysunloadplugin"));
+ aplugin.setLoadHints(QLibrary::ResolveAllSymbolsHint);
+ QCOMPARE(aplugin.loadHints(), QLibrary::ResolveAllSymbolsHint);
+ }
+
+ void testMetaData()
+ {
+ KPluginLoader aplugin(QStringLiteral("alwaysunloadplugin"));
+ QJsonObject ametadata = aplugin.metaData();
+ QVERIFY(!ametadata.isEmpty());
+ QVERIFY(ametadata.keys().contains(QLatin1String("IID")));
+ QJsonValue ametadata_metadata = ametadata.value(QStringLiteral("MetaData"));
+ QVERIFY(ametadata_metadata.toObject().isEmpty());
+ QVERIFY(!aplugin.isLoaded()); // didn't load anything
+
+ KPluginLoader jplugin(KPluginName(QStringLiteral("jsonplugin")));
+ QJsonObject jmetadata = jplugin.metaData();
+ QVERIFY(!jmetadata.isEmpty());
+ QJsonValue jmetadata_metadata = jmetadata.value(QStringLiteral("MetaData"));
+ QVERIFY(jmetadata_metadata.isObject());
+ QJsonObject jmetadata_obj = jmetadata_metadata.toObject();
+ QVERIFY(!jmetadata_obj.isEmpty());
+ QJsonValue comment = jmetadata_obj.value(QStringLiteral("KPlugin")).toObject().value(QStringLiteral("Description"));
+ QVERIFY(comment.isString());
+ QCOMPARE(comment.toString(), QString::fromLatin1("This is a plugin"));
+
+ KPluginLoader eplugin(KPluginName::fromErrorString(QStringLiteral("there was an error")));
+ QVERIFY(eplugin.metaData().isEmpty());
+
+ KPluginLoader noplugin(QStringLiteral("idonotexist"));
+ QVERIFY(noplugin.metaData().isEmpty());
+ }
+
+ void testUnload()
+ {
+ KPluginLoader aplugin(QStringLiteral("alwaysunloadplugin"));
+ QVERIFY(aplugin.load());
+ // may need QEXPECT_FAIL on some platforms...
+ QVERIFY(aplugin.unload());
+ }
+
+ void testInstantiatePlugins()
+ {
+ const QString plugin1Path = KPluginLoader::findPlugin(QStringLiteral("jsonplugin"));
+ QVERIFY2(!plugin1Path.isEmpty(), qPrintable(plugin1Path));
+ const QString plugin2Path = KPluginLoader::findPlugin(QStringLiteral("unversionedplugin"));
+ QVERIFY2(!plugin2Path.isEmpty(), qPrintable(plugin2Path));
+ const QString plugin3Path = KPluginLoader::findPlugin(QStringLiteral("jsonplugin2"));
+ QVERIFY2(!plugin3Path.isEmpty(), qPrintable(plugin3Path));
+
+ QTemporaryDir temp;
+ QVERIFY(temp.isValid());
+ QDir dir(temp.path());
+ QVERIFY2(QFile::copy(plugin1Path, dir.absoluteFilePath(QFileInfo(plugin1Path).fileName())),
+ qPrintable(dir.absoluteFilePath(QFileInfo(plugin1Path).fileName())));
+ QVERIFY2(QFile::copy(plugin2Path, dir.absoluteFilePath(QFileInfo(plugin2Path).fileName())),
+ qPrintable(dir.absoluteFilePath(QFileInfo(plugin2Path).fileName())));
+ QVERIFY2(QFile::copy(plugin3Path, dir.absoluteFilePath(QFileInfo(plugin3Path).fileName())),
+ qPrintable(dir.absoluteFilePath(QFileInfo(plugin3Path).fileName())));
+
+ // only jsonplugin, since unversionedplugin has no json metadata
+ QList<QObject *> plugins = KPluginLoader::instantiatePlugins(temp.path());
+ QCOMPARE(plugins.size(), 2);
+ QStringList classNames = QStringList() << QString::fromLatin1(plugins[0]->metaObject()->className())
+ << QString::fromLatin1(plugins[1]->metaObject()->className());
+ classNames.sort();
+ QCOMPARE(classNames[0], QStringLiteral("jsonplugin2"));
+ QCOMPARE(classNames[1], QStringLiteral("jsonpluginfa"));
+ qDeleteAll(plugins);
+
+ // try filter
+ plugins = KPluginLoader::instantiatePlugins(temp.path(), [](const KPluginMetaData &md) {
+ return md.pluginId() == QLatin1String("jsonplugin");
+ });
+ QCOMPARE(plugins.size(), 1);
+ QCOMPARE(plugins[0]->metaObject()->className(), "jsonpluginfa");
+ qDeleteAll(plugins);
+
+ plugins = KPluginLoader::instantiatePlugins(temp.path(), [](const KPluginMetaData &md) {
+ return md.pluginId() == QLatin1String("unversionedplugin");
+ });
+ QCOMPARE(plugins.size(), 0);
+
+ plugins = KPluginLoader::instantiatePlugins(temp.path(), [](const KPluginMetaData &md) {
+ return md.pluginId() == QLatin1String("foobar"); // ID does not match file name, is set in JSON
+ });
+ QCOMPARE(plugins.size(), 1);
+ QCOMPARE(plugins[0]->metaObject()->className(), "jsonplugin2");
+ qDeleteAll(plugins);
+
+ // check that parent gets set
+ plugins = KPluginLoader::instantiatePlugins(
+ temp.path(),
+ [](const KPluginMetaData &) {
+ return true;
+ },
+ this);
+ QCOMPARE(plugins.size(), 2);
+ QCOMPARE(plugins[0]->parent(), this);
+ QCOMPARE(plugins[1]->parent(), this);
+ qDeleteAll(plugins);
+
+ const QString subDirName = dir.dirName();
+ QVERIFY(dir.cdUp()); // should now point to /tmp on Linux
+ LibraryPathRestorer restorer(QCoreApplication::libraryPaths());
+ // instantiate using relative path
+ // make sure library path is set up correctly
+ QCoreApplication::setLibraryPaths(QStringList() << dir.absolutePath());
+ QVERIFY(!QDir::isAbsolutePath(subDirName));
+ plugins = KPluginLoader::instantiatePlugins(subDirName);
+ QCOMPARE(plugins.size(), 2);
+ classNames = QStringList() << QString::fromLatin1(plugins[0]->metaObject()->className()) << QString::fromLatin1(plugins[1]->metaObject()->className());
+ classNames.sort();
+ QCOMPARE(classNames[0], QStringLiteral("jsonplugin2"));
+ QCOMPARE(classNames[1], QStringLiteral("jsonpluginfa"));
+ qDeleteAll(plugins);
+ }
+
+ void testFindPlugins()
+ {
+ QTemporaryDir temp;
+ QVERIFY(temp.isValid());
+ QDir dir(temp.path());
+ QVERIFY(dir.mkdir(QStringLiteral("kpluginmetadatatest")));
+ QVERIFY(dir.cd(QStringLiteral("kpluginmetadatatest")));
+ for (const QString &name : {QStringLiteral("jsonplugin"), QStringLiteral("unversionedplugin"), QStringLiteral("jsonplugin2")}) {
+ const QString pluginPath = KPluginLoader::findPlugin(name);
+ QVERIFY2(!pluginPath.isEmpty(), qPrintable(pluginPath));
+ QVERIFY2(QFile::copy(pluginPath, dir.absoluteFilePath(QFileInfo(pluginPath).fileName())),
+ qPrintable(dir.absoluteFilePath(QFileInfo(pluginPath).fileName())));
+ }
+
+ LibraryPathRestorer restorer(QCoreApplication::libraryPaths());
+ // we only want plugins from our temporary dir
+ QCoreApplication::setLibraryPaths(QStringList() << temp.path());
+
+ auto sortPlugins = [](const KPluginMetaData &a, const KPluginMetaData &b) {
+ return a.pluginId() < b.pluginId();
+ };
+ // it should find jsonplugin and jsonplugin2 since unversionedplugin does not have any meta data
+ auto plugins = KPluginLoader::findPlugins(QStringLiteral("kpluginmetadatatest"));
+ std::sort(plugins.begin(), plugins.end(), sortPlugins);
+ QCOMPARE(plugins.size(), 2);
+ QCOMPARE(plugins[0].pluginId(), QStringLiteral("foobar")); // ID is not the filename, it is set in the JSON metadata
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+ QCOMPARE(plugins[1].pluginId(), QStringLiteral("jsonplugin"));
+ QCOMPARE(plugins[1].description(), QStringLiteral("This is a plugin"));
+
+ // filter accepts none
+ plugins = KPluginLoader::findPlugins(QStringLiteral("kpluginmetadatatest"), [](const KPluginMetaData &) {
+ return false;
+ });
+ std::sort(plugins.begin(), plugins.end(), sortPlugins);
+ QCOMPARE(plugins.size(), 0);
+
+ // filter accepts all
+ plugins = KPluginLoader::findPlugins(QStringLiteral("kpluginmetadatatest"), [](const KPluginMetaData &) {
+ return true;
+ });
+ std::sort(plugins.begin(), plugins.end(), sortPlugins);
+ QCOMPARE(plugins.size(), 2);
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+ QCOMPARE(plugins[1].description(), QStringLiteral("This is a plugin"));
+
+ // mimetype filter. Only one match, jsonplugin2 is specific to text/html.
+ auto supportTextPlain = [](const KPluginMetaData &metaData) {
+ return metaData.supportsMimeType(QLatin1String("text/plain"));
+ };
+ plugins = KPluginLoader::findPlugins(QStringLiteral("kpluginmetadatatest"), supportTextPlain);
+ QCOMPARE(plugins.size(), 1);
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is a plugin"));
+
+ // mimetype filter. Two matches, both support text/html, via inheritance.
+ auto supportTextHtml = [](const KPluginMetaData &metaData) {
+ return metaData.supportsMimeType(QLatin1String("text/html"));
+ };
+ plugins = KPluginLoader::findPlugins(QStringLiteral("kpluginmetadatatest"), supportTextHtml);
+ std::sort(plugins.begin(), plugins.end(), sortPlugins);
+ QCOMPARE(plugins.size(), 2);
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+ QCOMPARE(plugins[1].description(), QStringLiteral("This is a plugin"));
+
+ // mimetype filter with invalid mimetype
+ auto supportDoesNotExist = [](const KPluginMetaData &metaData) {
+ return metaData.supportsMimeType(QLatin1String("does/not/exist"));
+ };
+ plugins = KPluginLoader::findPlugins(QStringLiteral("kpluginmetadatatest"), supportDoesNotExist);
+ QCOMPARE(plugins.size(), 0);
+
+ // invalid std::function as filter
+ plugins = KPluginLoader::findPlugins(QStringLiteral("kpluginmetadatatest"));
+ std::sort(plugins.begin(), plugins.end(), sortPlugins);
+ QCOMPARE(plugins.size(), 2);
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+ QCOMPARE(plugins[1].description(), QStringLiteral("This is a plugin"));
+
+ // by plugin id
+ plugins = KPluginLoader::findPluginsById(dir.absolutePath(), QStringLiteral("foobar"));
+ QCOMPARE(plugins.size(), 1);
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+
+ // by plugin invalid id
+ plugins = KPluginLoader::findPluginsById(dir.absolutePath(), QStringLiteral("invalidid"));
+ QCOMPARE(plugins.size(), 0);
+
+ // absolute path, no filter
+ plugins = KPluginLoader::findPlugins(dir.absolutePath());
+ std::sort(plugins.begin(), plugins.end(), sortPlugins);
+ QCOMPARE(plugins.size(), 2);
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+ QCOMPARE(plugins[1].description(), QStringLiteral("This is a plugin"));
+
+ // This plugin has no explicit pluginId and will fall back to basename of file
+ const KPluginMetaData validPlugin = KPluginMetaData::findPluginById(dir.absolutePath(), QStringLiteral("jsonplugin"));
+ QVERIFY(validPlugin.isValid());
+ QCOMPARE(plugins[0].description(), QStringLiteral("This is another plugin"));
+
+ // The basename matches, but the pluginId does not match
+ const KPluginMetaData nonMatchingPluginId = KPluginMetaData::findPluginById(dir.absolutePath(), QStringLiteral("jsonplugin2"));
+ QVERIFY(!nonMatchingPluginId.isValid());
+
+ const KPluginMetaData nonExistingPlugin = KPluginMetaData::findPluginById(dir.absolutePath(), QStringLiteral("invalidid"));
+ QVERIFY(!nonExistingPlugin.isValid());
+ }
+
+ void testForEachPlugin()
+ {
+ const QString jsonPluginSrc = KPluginLoader::findPlugin(QStringLiteral("jsonplugin"));
+ QVERIFY2(!jsonPluginSrc.isEmpty(), qPrintable(jsonPluginSrc));
+ const QString unversionedPluginSrc = KPluginLoader::findPlugin(QStringLiteral("unversionedplugin"));
+ QVERIFY2(!unversionedPluginSrc.isEmpty(), qPrintable(unversionedPluginSrc));
+ const QString jsonPlugin2Src = KPluginLoader::findPlugin(QStringLiteral("jsonplugin2"));
+ QVERIFY2(!jsonPlugin2Src.isEmpty(), qPrintable(jsonPlugin2Src));
+
+ QTemporaryDir temp;
+ QVERIFY(temp.isValid());
+ QDir dir(temp.path());
+ QVERIFY(dir.mkdir(QStringLiteral("for-each-plugin")));
+ QVERIFY(dir.cd(QStringLiteral("for-each-plugin")));
+ const QString jsonPluginDest = dir.absoluteFilePath(QFileInfo(jsonPluginSrc).fileName());
+ QVERIFY2(QFile::copy(jsonPluginSrc, jsonPluginDest), qPrintable(jsonPluginDest));
+ const QString unversionedPluginDest = dir.absoluteFilePath(QFileInfo(unversionedPluginSrc).fileName());
+ QVERIFY2(QFile::copy(unversionedPluginSrc, unversionedPluginDest), qPrintable(unversionedPluginDest));
+ // copy jsonplugin2 to a "for-each-plugin" subdirectory in a different directory
+ QTemporaryDir temp2;
+ QVERIFY(temp2.isValid());
+ QDir dir2(temp2.path());
+ QVERIFY(dir2.mkdir(QStringLiteral("for-each-plugin")));
+ QVERIFY(dir2.cd(QStringLiteral("for-each-plugin")));
+ const QString jsonPlugin2Dest = dir2.absoluteFilePath(QFileInfo(jsonPlugin2Src).fileName());
+ QVERIFY2(QFile::copy(jsonPlugin2Src, jsonPlugin2Dest), qPrintable(jsonPlugin2Dest));
+
+ QStringList foundPlugins;
+ QStringList expectedPlugins;
+ const auto addToFoundPlugins = [&](const QString &path) {
+ QVERIFY(!path.isEmpty());
+ foundPlugins.append(path);
+ };
+
+ // test finding with absolute path
+ expectedPlugins = QStringList() << jsonPluginDest << unversionedPluginDest;
+ expectedPlugins.sort();
+ KPluginLoader::forEachPlugin(dir.path(), addToFoundPlugins);
+ foundPlugins.sort();
+ QCOMPARE(foundPlugins, expectedPlugins);
+
+ expectedPlugins = QStringList() << jsonPlugin2Dest;
+ expectedPlugins.sort();
+ foundPlugins.clear();
+ KPluginLoader::forEachPlugin(dir2.path(), addToFoundPlugins);
+ foundPlugins.sort();
+ QCOMPARE(foundPlugins, expectedPlugins);
+
+ // now test relative paths
+
+ LibraryPathRestorer restorer(QCoreApplication::libraryPaths());
+ QCoreApplication::setLibraryPaths(QStringList() << temp.path());
+ expectedPlugins = QStringList() << jsonPluginDest << unversionedPluginDest;
+ expectedPlugins.sort();
+ foundPlugins.clear();
+ KPluginLoader::forEachPlugin(QStringLiteral("for-each-plugin"), addToFoundPlugins);
+ foundPlugins.sort();
+ QCOMPARE(foundPlugins, expectedPlugins);
+
+ QCoreApplication::setLibraryPaths(QStringList() << temp2.path());
+ expectedPlugins = QStringList() << jsonPlugin2Dest;
+ expectedPlugins.sort();
+ foundPlugins.clear();
+ KPluginLoader::forEachPlugin(QStringLiteral("for-each-plugin"), addToFoundPlugins);
+ foundPlugins.sort();
+ QCOMPARE(foundPlugins, expectedPlugins);
+
+ QCoreApplication::setLibraryPaths(QStringList() << temp.path() << temp2.path());
+ expectedPlugins = QStringList() << jsonPluginDest << unversionedPluginDest << jsonPlugin2Dest;
+ expectedPlugins.sort();
+ foundPlugins.clear();
+ KPluginLoader::forEachPlugin(QStringLiteral("for-each-plugin"), addToFoundPlugins);
+ foundPlugins.sort();
+ QCOMPARE(foundPlugins, expectedPlugins);
+ }
+};
+
+QTEST_MAIN(KPluginLoaderTest)
+
+#include "kpluginloadertest.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonParseError>
+#include <QRegularExpression>
+#include <QStandardPaths>
+#include <QTest>
+
+#include "kcoreaddons_debug.h"
+#include <kaboutdata.h>
+#include <kpluginloader.h>
+#include <kpluginmetadata.h>
+
+#include <QLocale>
+#include <QLoggingCategory>
+
+namespace QTest
+{
+template<>
+inline char *toString(const QJsonValue &val)
+{
+ // simply reuse the QDebug representation
+ QString result;
+ QDebug(&result) << val;
+ return QTest::toString(result);
+}
+}
+
+class KPluginMetaDataTest : public QObject
+{
+ Q_OBJECT
+ bool m_canMessage = false;
+
+ void doMessagesWorkInternal()
+ {
+ }
+
+ Q_REQUIRED_RESULT bool doMessagesWork()
+ {
+ // Q_SKIP returns, but since this is called in multiple tests we want to return a bool so the caller can
+ // return easily.
+ auto internalCheck = [this] {
+ // Make sure output is well formed AND generated. To that end we cannot run this test when any of the
+ // overriding environment variables are set.
+ // https://bugs.kde.org/show_bug.cgi?id=387006
+ if (qEnvironmentVariableIsSet("QT_MESSAGE_PATTERN")) {
+ QSKIP("QT_MESSAGE_PATTERN prevents warning expectations from matching");
+ }
+ if (qEnvironmentVariableIsSet("QT_LOGGING_RULES")) {
+ QSKIP("QT_LOGGING_RULES prevents warning expectations from matching");
+ }
+ if (qEnvironmentVariableIsSet("QT_LOGGING_CONF")) {
+ QSKIP("QT_LOGGING_CONF prevents warning expectations from matching");
+ }
+ m_canMessage = true;
+ // Ensure all frameworks output is enabled so the expectations can match.
+ // qtlogging.ini may have disabled it but we can fix that because setFilterRules overrides the ini files.
+ QLoggingCategory::setFilterRules(QStringLiteral("kf.*=true"));
+ };
+ internalCheck();
+ return m_canMessage;
+ }
+private Q_SLOTS:
+
+ void testFromPluginLoader()
+ {
+ QString location = KPluginLoader::findPlugin(QStringLiteral("jsonplugin"));
+ QVERIFY2(!location.isEmpty(), "Could not find jsonplugin");
+
+ // now that this file is translated we need to read it instead of hardcoding the contents here
+ QString jsonLocation = QFINDTESTDATA("jsonplugin.json");
+ QVERIFY2(!jsonLocation.isEmpty(), "Could not find jsonplugin.json");
+ QFile jsonFile(jsonLocation);
+ QVERIFY(jsonFile.open(QFile::ReadOnly));
+ QJsonParseError e;
+ QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonFile.readAll(), &e);
+ QCOMPARE(e.error, QJsonParseError::NoError);
+
+ location = QFileInfo(location).absoluteFilePath();
+
+ KPluginMetaData fromQPluginLoader(QPluginLoader(QStringLiteral("jsonplugin")));
+ KPluginMetaData fromKPluginLoader(KPluginLoader(QStringLiteral("jsonplugin")));
+ KPluginMetaData fromFullPath(location);
+ KPluginMetaData fromRelativePath(QStringLiteral("jsonplugin"));
+ KPluginMetaData fromRawData(jsonDoc.object(), location);
+
+ auto description = QStringLiteral("This is a plugin");
+
+ QVERIFY(fromQPluginLoader.isValid());
+ QCOMPARE(fromQPluginLoader.description(), description);
+ QVERIFY(fromKPluginLoader.isValid());
+ QCOMPARE(fromKPluginLoader.description(), description);
+ QVERIFY(fromFullPath.isValid());
+ QCOMPARE(fromFullPath.description(), description);
+ QVERIFY(fromRelativePath.isValid());
+ QCOMPARE(fromRelativePath.description(), description);
+ QVERIFY(fromRawData.isValid());
+ QCOMPARE(fromRawData.description(), description);
+
+ // check operator==
+ QCOMPARE(fromRawData, fromRawData);
+ QCOMPARE(fromQPluginLoader, fromQPluginLoader);
+ QCOMPARE(fromKPluginLoader, fromKPluginLoader);
+ QCOMPARE(fromFullPath, fromFullPath);
+
+ QCOMPARE(fromQPluginLoader, fromKPluginLoader);
+ QCOMPARE(fromQPluginLoader, fromFullPath);
+ QCOMPARE(fromQPluginLoader, fromRawData);
+
+ QCOMPARE(fromKPluginLoader, fromQPluginLoader);
+ QCOMPARE(fromKPluginLoader, fromFullPath);
+ QCOMPARE(fromKPluginLoader, fromRawData);
+
+ QCOMPARE(fromFullPath, fromQPluginLoader);
+ QCOMPARE(fromFullPath, fromKPluginLoader);
+ QCOMPARE(fromFullPath, fromRawData);
+
+ QCOMPARE(fromRawData, fromQPluginLoader);
+ QCOMPARE(fromRawData, fromKPluginLoader);
+ QCOMPARE(fromRawData, fromFullPath);
+ }
+
+ void testAllKeys()
+ {
+ QJsonParseError e;
+ QJsonObject jo = QJsonDocument::fromJson(
+ "{\n"
+ " \"KPlugin\": {\n"
+ " \"Name\": \"Date and Time\",\n"
+ " \"Description\": \"Date and time by timezone\",\n"
+ " \"Icon\": \"preferences-system-time\",\n"
+ " \"Authors\": { \"Name\": \"Aaron Seigo\", \"Email\": \"aseigo@kde.org\" },\n"
+ " \"Translators\": { \"Name\": \"No One\", \"Email\": \"no.one@kde.org\" },\n"
+ " \"OtherContributors\": { \"Name\": \"No One\", \"Email\": \"no.one@kde.org\" },\n"
+ " \"Category\": \"Date and Time\",\n"
+ " \"Dependencies\": [ \"foo\", \"bar\"],\n"
+ " \"EnabledByDefault\": \"true\",\n"
+ " \"ExtraInformation\": \"Something else\",\n"
+ " \"License\": \"LGPL\",\n"
+ " \"Copyright\": \"(c) Alex Richardson 2015\",\n"
+ " \"Id\": \"time\",\n"
+ " \"Version\": \"1.0\",\n"
+ " \"Website\": \"https://plasma.kde.org/\",\n"
+ " \"MimeTypes\": [ \"image/png\" ],\n"
+ " \"ServiceTypes\": [\"Plasma/DataEngine\"]\n"
+ " }\n}\n",
+ &e)
+ .object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ KPluginMetaData m(jo, QString());
+ QVERIFY(m.isValid());
+ QCOMPARE(m.pluginId(), QStringLiteral("time"));
+ QCOMPARE(m.name(), QStringLiteral("Date and Time"));
+ QCOMPARE(m.description(), QStringLiteral("Date and time by timezone"));
+ QCOMPARE(m.extraInformation(), QStringLiteral("Something else"));
+ QCOMPARE(m.iconName(), QStringLiteral("preferences-system-time"));
+ QCOMPARE(m.category(), QStringLiteral("Date and Time"));
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 79)
+ QCOMPARE(m.dependencies(), QStringList() << QStringLiteral("foo") << QStringLiteral("bar"));
+#endif
+ QCOMPARE(m.authors().size(), 1);
+ QCOMPARE(m.authors().constFirst().name(), QStringLiteral("Aaron Seigo"));
+ QCOMPARE(m.authors().constFirst().emailAddress(), QStringLiteral("aseigo@kde.org"));
+ QCOMPARE(m.translators().size(), 1);
+ QCOMPARE(m.translators().constFirst().name(), QStringLiteral("No One"));
+ QCOMPARE(m.translators().constFirst().emailAddress(), QStringLiteral("no.one@kde.org"));
+ QCOMPARE(m.otherContributors().size(), 1);
+ QCOMPARE(m.otherContributors().constFirst().name(), QStringLiteral("No One"));
+ QCOMPARE(m.otherContributors().constFirst().emailAddress(), QStringLiteral("no.one@kde.org"));
+ QVERIFY(m.isEnabledByDefault());
+ QCOMPARE(m.license(), QStringLiteral("LGPL"));
+ QCOMPARE(m.copyrightText(), QStringLiteral("(c) Alex Richardson 2015"));
+ QCOMPARE(m.version(), QStringLiteral("1.0"));
+ QCOMPARE(m.website(), QStringLiteral("https://plasma.kde.org/"));
+ QCOMPARE(m.serviceTypes(), QStringList() << QStringLiteral("Plasma/DataEngine"));
+ QCOMPARE(m.mimeTypes(), QStringList() << QStringLiteral("image/png"));
+ }
+
+ void testTranslations()
+ {
+ QJsonParseError e;
+ QJsonObject jo = QJsonDocument::fromJson(
+ "{ \"KPlugin\": {\n"
+ "\"Name\": \"Name\",\n"
+ "\"Name[de]\": \"Name (de)\",\n"
+ "\"Name[de_DE]\": \"Name (de_DE)\",\n"
+ "\"Description\": \"Description\",\n"
+ "\"Description[de]\": \"Beschreibung (de)\",\n"
+ "\"Description[de_DE]\": \"Beschreibung (de_DE)\"\n"
+ "}\n}",
+ &e)
+ .object();
+ KPluginMetaData m(jo, QString());
+ QLocale::setDefault(QLocale::c());
+ QCOMPARE(m.name(), QStringLiteral("Name"));
+ QCOMPARE(m.description(), QStringLiteral("Description"));
+
+ QLocale::setDefault(QLocale(QStringLiteral("de_DE")));
+ QCOMPARE(m.name(), QStringLiteral("Name (de_DE)"));
+ QCOMPARE(m.description(), QStringLiteral("Beschreibung (de_DE)"));
+
+ QLocale::setDefault(QLocale(QStringLiteral("de_CH")));
+ QCOMPARE(m.name(), QStringLiteral("Name (de)"));
+ QCOMPARE(m.description(), QStringLiteral("Beschreibung (de)"));
+
+ QLocale::setDefault(QLocale(QStringLiteral("fr_FR")));
+ QCOMPARE(m.name(), QStringLiteral("Name"));
+ QCOMPARE(m.description(), QStringLiteral("Description"));
+ }
+
+ void testReadStringList()
+ {
+ if (!doMessagesWork()) {
+ return;
+ }
+ QJsonParseError e;
+ QJsonObject jo = QJsonDocument::fromJson(
+ "{\n"
+ "\"String\": \"foo\",\n"
+ "\"OneArrayEntry\": [ \"foo\" ],\n"
+ "\"Bool\": true,\n" // make sure booleans are accepted
+ "\"QuotedBool\": \"true\",\n" // make sure booleans are accepted
+ "\"Number\": 12345,\n" // number should also work
+ "\"QuotedNumber\": \"12345\",\n" // number should also work
+ "\"EmptyArray\": [],\n"
+ "\"NumberArray\": [1, 2, 3],\n"
+ "\"BoolArray\": [true, false, true],\n"
+ "\"StringArray\": [\"foo\", \"bar\"],\n"
+ "\"Null\": null,\n" // should return empty list
+ "\"QuotedNull\": \"null\",\n" // this is okay, it is a string
+ "\"ArrayWithNull\": [ \"foo\", null, \"bar\"],\n" // TODO: null is converted to empty string, is this okay?
+ "\"Object\": { \"foo\": \"bar\" }\n" // should return empty list
+ "}",
+ &e)
+ .object();
+ QCOMPARE(e.error, QJsonParseError::NoError);
+ QTest::ignoreMessage(QtWarningMsg, "Expected JSON property \"String\" to be a string list. Treating it as a list with a single entry: \"foo\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("String")), QStringList(QStringLiteral("foo")));
+ ;
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("OneArrayEntry")), QStringList(QStringLiteral("foo")));
+ QTest::ignoreMessage(QtWarningMsg, "Expected JSON property \"Bool\" to be a string list. Treating it as a list with a single entry: \"true\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("Bool")), QStringList(QStringLiteral("true")));
+ QTest::ignoreMessage(QtWarningMsg, "Expected JSON property \"QuotedBool\" to be a string list. Treating it as a list with a single entry: \"true\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("QuotedBool")), QStringList(QStringLiteral("true")));
+ QTest::ignoreMessage(QtWarningMsg, "Expected JSON property \"Number\" to be a string list. Treating it as a list with a single entry: \"12345\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("Number")), QStringList(QStringLiteral("12345")));
+ QTest::ignoreMessage(QtWarningMsg,
+ "Expected JSON property \"QuotedNumber\" to be a string list. Treating it as a list with a single entry: \"12345\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("QuotedNumber")), QStringList(QStringLiteral("12345")));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("EmptyArray")), QStringList());
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("NumberArray")),
+ QStringList() << QStringLiteral("1") << QStringLiteral("2") << QStringLiteral("3"));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("BoolArray")),
+ QStringList() << QStringLiteral("true") << QStringLiteral("false") << QStringLiteral("true"));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("StringArray")), QStringList() << QStringLiteral("foo") << QStringLiteral("bar"));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("Null")), QStringList());
+ QTest::ignoreMessage(QtWarningMsg, "Expected JSON property \"QuotedNull\" to be a string list. Treating it as a list with a single entry: \"null\" ");
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("QuotedNull")), QStringList(QStringLiteral("null")));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("ArrayWithNull")),
+ QStringList() << QStringLiteral("foo") << QString() << QStringLiteral("bar"));
+ QCOMPARE(KPluginMetaData::readStringList(jo, QStringLiteral("Object")), QStringList());
+ }
+
+ void testFromDesktopFile()
+ {
+ const QString dfile = QFINDTESTDATA("data/fakeplugin.desktop");
+ KPluginMetaData md(dfile);
+ QVERIFY(md.isValid());
+ QCOMPARE(md.pluginId(), QStringLiteral("fakeplugin"));
+ QCOMPARE(md.fileName(), QStringLiteral("fakeplugin"));
+ QCOMPARE(md.metaDataFileName(), dfile);
+ QCOMPARE(md.iconName(), QStringLiteral("preferences-system-time"));
+ QCOMPARE(md.license(), QStringLiteral("LGPL"));
+ QCOMPARE(md.website(), QStringLiteral("https://kde.org/"));
+ QCOMPARE(md.category(), QStringLiteral("Examples"));
+ QCOMPARE(md.version(), QStringLiteral("1.0"));
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 79)
+ QCOMPARE(md.dependencies(), QStringList());
+#endif
+ QCOMPARE(md.isHidden(), false);
+ QCOMPARE(md.serviceTypes(), QStringList(QStringLiteral("KService/NSA")));
+ QCOMPARE(md.mimeTypes(), QStringList() << QStringLiteral("image/png") << QStringLiteral("application/pdf"));
+
+ auto kp = md.rawData()[QStringLiteral("KPlugin")].toObject();
+ QStringList formFactors = KPluginMetaData::readStringList(kp, QStringLiteral("FormFactors"));
+ QCOMPARE(formFactors, QStringList() << QStringLiteral("mediacenter") << QStringLiteral("desktop"));
+ QCOMPARE(md.formFactors(), QStringList() << QStringLiteral("mediacenter") << QStringLiteral("desktop"));
+
+ const QString dfilehidden = QFINDTESTDATA("data/hiddenplugin.desktop");
+ KPluginMetaData mdhidden(dfilehidden);
+ QVERIFY(mdhidden.isValid());
+ QCOMPARE(mdhidden.isHidden(), true);
+ }
+
+ void twoStepsParseTest()
+ {
+ QStandardPaths::setTestModeEnabled(true);
+ const QString dfile = QFINDTESTDATA("data/twostepsparsetest.desktop");
+ const QString typesPath = QFINDTESTDATA("data/servicetypes/example-servicetype.desktop");
+ KPluginMetaData md = KPluginMetaData::fromDesktopFile(dfile, QStringList() << typesPath);
+ QVERIFY(md.isValid());
+ QStringList list = KPluginMetaData::readStringList(md.rawData(), QStringLiteral("X-Test-List"));
+ QCOMPARE(list, QStringList({QStringLiteral("first"), QStringLiteral("second")}));
+ }
+
+ void testServiceTypes_data()
+ {
+ const QString kdevServiceTypePath = QFINDTESTDATA("data/servicetypes/fake-kdevelopplugin.desktop");
+ const QString invalidServiceTypePath = QFINDTESTDATA("data/servicetypes/invalid-servicetype.desktop");
+ const QString exampleServiceTypePath = QFINDTESTDATA("data/servicetypes/example-servicetype.desktop");
+ QVERIFY(!kdevServiceTypePath.isEmpty());
+ QVERIFY(!invalidServiceTypePath.isEmpty());
+ QVERIFY(!exampleServiceTypePath.isEmpty());
+ }
+
+ void testServiceType()
+ {
+ if (!doMessagesWork()) {
+ return;
+ }
+ const QString typesPath = QFINDTESTDATA("data/servicetypes/example-servicetype.desktop");
+ QVERIFY(!typesPath.isEmpty());
+ const QString inputPath = QFINDTESTDATA("data/servicetypes/example-input.desktop");
+ QVERIFY(!inputPath.isEmpty());
+ QTest::ignoreMessage(QtWarningMsg,
+ qPrintable(QStringLiteral("Unable to find service type for service \"bar/foo\" listed in \"") + inputPath + QLatin1Char('"')));
+ KPluginMetaData md = KPluginMetaData::fromDesktopFile(inputPath, QStringList() << typesPath);
+ QVERIFY(md.isValid());
+ QCOMPARE(md.name(), QStringLiteral("Example"));
+ QCOMPARE(md.serviceTypes(), QStringList() << QStringLiteral("example/servicetype") << QStringLiteral("bar/foo"));
+ QCOMPARE(md.rawData().size(), 8);
+ QVERIFY(md.rawData().value(QStringLiteral("KPlugin")).isObject());
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-Integer")), QJsonValue(42));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-Bool")), QJsonValue(true));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-Double")), QJsonValue(42.42));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-String")), QJsonValue(QStringLiteral("foobar")));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-List")),
+ QJsonValue(
+ QJsonArray::fromStringList(QStringList() << QStringLiteral("a") << QStringLiteral("b") << QStringLiteral("c") << QStringLiteral("def"))));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-Size")), QJsonValue(QStringLiteral("10,20"))); // QSize no longer supported (and also no longer used)
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Test-Unknown")), QJsonValue(QStringLiteral("true"))); // unknown property -> string
+ }
+
+ void testBadGroupsInServiceType()
+ {
+ if (!doMessagesWork()) {
+ return;
+ }
+ const QString typesPath = QFINDTESTDATA("data/servicetypes/bad-groups-servicetype.desktop");
+ QVERIFY(!typesPath.isEmpty());
+ const QString inputPath = QFINDTESTDATA("data/servicetypes/bad-groups-input.desktop");
+ QVERIFY(!inputPath.isEmpty());
+ QTest::ignoreMessage(QtWarningMsg, "Illegal .desktop group definition (does not end with ']'): \"[PropertyDef::MissingTerminator\"");
+ QTest::ignoreMessage(QtWarningMsg, "Illegal .desktop group definition (does not end with ']'): \"[PropertyDef::\"");
+ QTest::ignoreMessage(QtWarningMsg, "Illegal .desktop group definition (does not end with ']'): \"[\"");
+ QTest::ignoreMessage(QtWarningMsg, "Read empty .desktop file group name! Invalid file?");
+ QTest::ignoreMessage(QtWarningMsg,
+ QRegularExpression(QStringLiteral("Skipping invalid group \"\" in service type \".*/bad-groups-servicetype.desktop\"")));
+ QTest::ignoreMessage(QtWarningMsg,
+ QRegularExpression(QStringLiteral("Skipping invalid group \"DoesNotStartWithPropertyDef::SomeOtherProperty\" in service type "
+ "\".+/data/servicetypes/bad-groups-servicetype.desktop\"")));
+ QTest::ignoreMessage(QtWarningMsg, "Could not find Type= key in group \"PropertyDef::MissingType\"");
+ QTest::ignoreMessage(QtWarningMsg,
+ QRegularExpression(QStringLiteral("Property type \"integer\" is not a known QVariant type. Found while parsing property "
+ "definition for \"InvalidType\" in \".+/data/servicetypes/bad-groups-servicetype.desktop\"")));
+ QTest::ignoreMessage(QtWarningMsg,
+ QRegularExpression(QStringLiteral(".+/data/servicetypes/bad-groups-input.desktop:\\d+: Key name is missing: \"=11\"")));
+ QTest::ignoreMessage(QtWarningMsg,
+ QRegularExpression(QStringLiteral(".+/data/servicetypes/bad-groups-input.desktop:\\d+: Key name is missing: \"=13\"")));
+ QTest::ignoreMessage(QtWarningMsg,
+ QRegularExpression(QStringLiteral(".+/data/servicetypes/bad-groups-input.desktop:\\d+: Key name is missing: \"=14\"")));
+ KPluginMetaData md = KPluginMetaData::fromDesktopFile(inputPath, QStringList() << typesPath);
+ QVERIFY(md.isValid());
+ QCOMPARE(md.name(), QStringLiteral("Bad Groups"));
+ QCOMPARE(md.rawData().size(), 8);
+ QCOMPARE(md.rawData().value(QStringLiteral("ThisIsOkay")), QJsonValue(10)); // integer
+ // 11 is empty group
+ QCOMPARE(md.rawData().value(QStringLiteral("MissingTerminator")), QJsonValue(12)); // accept missing group terminator (for now) -> integer
+ // 13 is empty group name
+ // 14 is empty group name
+ QCOMPARE(md.rawData().value(QStringLiteral("SomeOtherProperty")),
+ QJsonValue(QStringLiteral("15"))); // does not start with PropertyDef:: -> fall back to string
+ QCOMPARE(md.rawData().value(QStringLiteral("TrailingSpacesAreOkay")), QJsonValue(16)); // accept trailing spaces in group name -> integer
+ QCOMPARE(md.rawData().value(QStringLiteral("MissingType")), QJsonValue(QStringLiteral("17"))); // Type= missing -> fall back to string
+ QCOMPARE(md.rawData().value(QStringLiteral("InvalidType")), QJsonValue(QStringLiteral("18"))); // Type= is invalid -> fall back to string
+ QCOMPARE(md.rawData().value(QStringLiteral("ThisIsOkayAgain")), QJsonValue(19)); // valid definition after invalid ones should still work -> integer
+ }
+
+ void testJSONMetadata()
+ {
+ const QString inputPath = QFINDTESTDATA("data/testmetadata.json");
+ KPluginMetaData md(inputPath);
+ QVERIFY(md.isValid());
+ QCOMPARE(md.name(), QStringLiteral("Test"));
+
+ QCOMPARE(md.value(QStringLiteral("X-Plasma-MainScript")), QStringLiteral("ui/main.qml"));
+ QJsonArray expected;
+ expected.append(QStringLiteral("Export"));
+ QCOMPARE(md.rawData().value(QStringLiteral("X-Purpose-PluginTypes")).toArray(), expected);
+ }
+};
+
+QTEST_MAIN(KPluginMetaDataTest)
+
+#include "kpluginmetadatatest.moc"
--- /dev/null
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kprocesslisttest.h"
+#include "kprocesslist.h"
+#include "kuser.h"
+#include <QCoreApplication>
+#include <QTest>
+#include <algorithm>
+
+namespace
+{
+QString getTestExeName()
+{
+ static QString testExeName = QCoreApplication::instance()->applicationFilePath().section(QLatin1Char('/'), -1);
+ return testExeName;
+}
+
+}
+
+QTEST_MAIN(KProcessListTest)
+
+void KProcessListTest::testKProcessInfoConstructionAssignment()
+{
+ KProcessList::KProcessInfo processInfoDefaultConstructed;
+ QVERIFY(processInfoDefaultConstructed.isValid() == false);
+ const qint64 pid(42);
+ const QString name(QStringLiteral("/bin/some_exe"));
+ const QString user(QStringLiteral("some_user"));
+ KProcessList::KProcessInfo processInfo(pid, name, user);
+ QVERIFY(processInfo.isValid() == true);
+ QCOMPARE(processInfo.pid(), pid);
+ QCOMPARE(processInfo.name(), name);
+ QCOMPARE(processInfo.user(), user);
+ KProcessList::KProcessInfo processInfoCopy(processInfo);
+ QVERIFY(processInfoCopy.isValid() == true);
+ QCOMPARE(processInfoCopy.pid(), pid);
+ QCOMPARE(processInfoCopy.name(), name);
+ QCOMPARE(processInfoCopy.user(), user);
+ KProcessList::KProcessInfo processInfoAssignment;
+ processInfoAssignment = processInfo;
+ QVERIFY(processInfoAssignment.isValid() == true);
+ QCOMPARE(processInfoAssignment.pid(), pid);
+ QCOMPARE(processInfoAssignment.name(), name);
+ QCOMPARE(processInfoAssignment.user(), user);
+}
+
+void KProcessListTest::testProcessInfoList()
+{
+ KProcessList::KProcessInfoList processInfoList = KProcessList::processInfoList();
+ QVERIFY(processInfoList.empty() == false);
+ auto testProcessIterator = std::find_if(processInfoList.begin(), processInfoList.end(), [](const KProcessList::KProcessInfo &info) {
+ return info.command().endsWith(QLatin1String("/") + getTestExeName());
+ });
+ QVERIFY(testProcessIterator != processInfoList.end());
+ const auto &processInfo = *testProcessIterator;
+ QVERIFY(processInfo.isValid() == true);
+ QVERIFY(processInfo.command().endsWith(QLatin1String("/") + getTestExeName()));
+ QCOMPARE(processInfo.name(), getTestExeName());
+ QCOMPARE(processInfo.pid(), QCoreApplication::applicationPid());
+ QCOMPARE(processInfo.user(), KUser().loginName());
+}
+
+void KProcessListTest::testProcessInfo()
+{
+ const qint64 testExePid = QCoreApplication::applicationPid();
+ KProcessList::KProcessInfo processInfo = KProcessList::processInfo(testExePid);
+ QVERIFY(processInfo.isValid() == true);
+ QVERIFY(processInfo.command().endsWith(QLatin1String("/") + getTestExeName()));
+ QCOMPARE(processInfo.pid(), testExePid);
+ QCOMPARE(processInfo.user(), KUser().loginName());
+}
+
+void KProcessListTest::testProcessInfoNotFound()
+{
+ KProcessList::KProcessInfo processInfo = KProcessList::processInfo(-1);
+ QVERIFY(processInfo.isValid() == false);
+}
--- /dev/null
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KPROCESSLISTTEST_H
+#define KPROCESSLISTTEST_H
+
+#include <QObject>
+
+class KProcessListTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void testKProcessInfoConstructionAssignment();
+ void testProcessInfoList();
+ void testProcessInfo();
+ void testProcessInfoNotFound();
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kprocesstest_helper.h"
+#include <QFile>
+#include <QObject>
+#include <QStandardPaths>
+#include <QTest>
+#include <kprocess.h>
+
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+class KProcessTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void test_channels();
+ void test_setShellCommand();
+};
+
+// IOCCC nomination pending
+
+static QString callHelper(KProcess::OutputChannelMode how)
+{
+ QProcess p;
+ p.setProcessChannelMode(QProcess::MergedChannels);
+
+ QString helper = QCoreApplication::applicationDirPath() + QStringLiteral("/kprocesstest_helper");
+#ifdef Q_OS_WIN
+ helper += QStringLiteral(".exe");
+#endif
+
+ Q_ASSERT(QFile::exists(helper));
+ p.start(helper, QStringList() << QString::number(how) << QStringLiteral("--nocrashhandler"));
+ p.waitForFinished();
+ return QString::fromLatin1(p.readAllStandardOutput());
+}
+
+#define EO EOUT "\n"
+#define EE EERR "\n"
+#define TESTCHAN(me, ms, pout, rout, rerr) \
+ e = QStringLiteral("mode: " ms "\n" POUT pout ROUT rout RERR rerr); \
+ a = QStringLiteral("mode: " ms "\n") + callHelper(KProcess::me); \
+ QCOMPARE(a, e)
+
+void KProcessTest::test_channels()
+{
+#ifdef Q_OS_UNIX
+ QString e, a;
+ TESTCHAN(SeparateChannels, "separate", "", EO, EE);
+ TESTCHAN(ForwardedChannels, "forwarded", EO EE, "", "");
+ TESTCHAN(OnlyStderrChannel, "forwarded stdout", EO, "", EE);
+ TESTCHAN(OnlyStdoutChannel, "forwarded stderr", EE, EO, "");
+ TESTCHAN(MergedChannels, "merged", "", EO EE, "");
+#else
+ Q_UNUSED(callHelper);
+ QSKIP("This test needs a UNIX system");
+#endif
+}
+
+void KProcessTest::test_setShellCommand()
+{
+ // Condition copied from kprocess.cpp
+#if !defined(__linux__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__) && !defined(__GNU__)
+ QSKIP("This test needs a free UNIX system");
+#else
+ KProcess p;
+
+ p.setShellCommand(QStringLiteral("cat"));
+ QCOMPARE(p.program().count(), 1);
+ QCOMPARE(p.program().at(0), QStandardPaths::findExecutable(QStringLiteral("cat")));
+ QVERIFY(p.program().at(0).endsWith(QLatin1String("/bin/cat")));
+ p.setShellCommand(QStringLiteral("true || false"));
+ QCOMPARE(p.program(), QStringList() << QStringLiteral("/bin/sh") << QStringLiteral("-c") << QString::fromLatin1("true || false"));
+#endif
+}
+
+QTEST_MAIN(KProcessTest)
+
+#include "kprocesstest.moc"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kprocesstest_helper.h"
+#include <kprocess.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char **argv)
+{
+ if (argc < 2) {
+ printf("Missing parameter");
+ return -1;
+ }
+ KProcess p;
+ p.setShellCommand(QString::fromLatin1("echo " EOUT "; echo " EERR " >&2"));
+ p.setOutputChannelMode(static_cast<KProcess::OutputChannelMode>(atoi(argv[1])));
+ fputs(POUT, stdout);
+ fflush(stdout);
+ p.execute();
+ fputs(ROUT, stdout);
+ fputs(p.readAllStandardOutput().constData(), stdout);
+ fputs(RERR, stdout);
+ fputs(p.readAllStandardError().constData(), stdout);
+ return 0;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#define EOUT "foo - stdout"
+#define EERR "bar - stderr"
+#define POUT "program output:\n"
+#define ROUT "received stdout:\n"
+#define RERR "received stderr:\n"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ SPDX-FileCopyrightText: 2016 Michael Pyne <mpyne@kde.org>
+ SPDX-FileCopyrightText: 2016 Arne Spiegelhauer <gm2.asp@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include <krandom.h>
+#include <krandomsequence.h>
+#include <stdlib.h>
+
+#include <QTest>
+#include <QThread>
+
+#include <QObject>
+#include <QProcess>
+#include <QRegularExpression>
+#include <QString>
+#include <QTextStream>
+#include <QVarLengthArray>
+
+#include <algorithm>
+#include <iostream>
+
+typedef QVarLengthArray<int> intSequenceType;
+
+static const char *binpath;
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 75)
+static bool seqsAreEqual(const intSequenceType &l, const intSequenceType &r)
+{
+ if (l.size() != r.size()) {
+ return false;
+ }
+ const intSequenceType::const_iterator last(l.end());
+
+ intSequenceType::const_iterator l_first(l.begin());
+ intSequenceType::const_iterator r_first(r.begin());
+
+ while (l_first != last && *l_first == *r_first) {
+ l_first++;
+ r_first++;
+ }
+
+ return l_first == last;
+}
+#endif
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 72)
+// Fills seq with random bytes produced by a new process. Seq should already
+// be sized to the needed amount of random numbers.
+static bool getChildRandSeq(intSequenceType &seq)
+{
+ QProcess subtestProcess;
+
+ // Launch a separate process to generate random numbers to test first-time
+ // seeding.
+ subtestProcess.start(QLatin1String(binpath), QStringList() << QString::number(seq.count()));
+ subtestProcess.waitForFinished();
+
+ QTextStream childStream(subtestProcess.readAllStandardOutput());
+
+ std::generate(seq.begin(), seq.end(), [&]() {
+ int temp;
+ childStream >> temp;
+ return temp;
+ });
+
+ char c;
+ childStream >> c;
+ return c == '\n' && childStream.status() == QTextStream::Ok;
+}
+#endif
+
+class KRandomTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 72)
+ void test_random();
+#endif
+ void test_randomString();
+ void test_randomStringThreaded();
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 75)
+ void test_KRS();
+#endif
+ void test_shuffle();
+};
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 72)
+void KRandomTest::test_random()
+{
+ int testValue = KRandom::random();
+
+ QVERIFY(testValue >= 0);
+ QVERIFY(testValue < RAND_MAX);
+
+ // Verify seeding results in different numbers across different procs
+ // See bug 362161
+ intSequenceType out1(10), out2(10);
+
+ QVERIFY(getChildRandSeq(out1));
+ QVERIFY(getChildRandSeq(out2));
+
+ QVERIFY(!seqsAreEqual(out1, out2));
+}
+#endif
+
+void KRandomTest::test_randomString()
+{
+ const int desiredLength = 12;
+ const QString testString = KRandom::randomString(desiredLength);
+ const QRegularExpression outputFormat(QRegularExpression::anchoredPattern(QStringLiteral("[A-Za-z0-9]+")));
+ const QRegularExpressionMatch match = outputFormat.match(testString);
+
+ QCOMPARE(testString.length(), desiredLength);
+ QVERIFY(match.hasMatch());
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 75)
+void KRandomTest::test_KRS()
+{
+ using std::all_of;
+ using std::generate;
+
+ const int maxInt = 50000;
+ KRandomSequence krs1, krs2;
+ intSequenceType out1(10), out2(10);
+
+ generate(out1.begin(), out1.end(), [&]() {
+ return krs1.getInt(maxInt);
+ });
+ generate(out2.begin(), out2.end(), [&]() {
+ return krs2.getInt(maxInt);
+ });
+ QVERIFY(!seqsAreEqual(out1, out2));
+ QVERIFY(all_of(out1.begin(), out1.end(), [&](int x) {
+ return x < maxInt;
+ }));
+ QVERIFY(all_of(out2.begin(), out2.end(), [&](int x) {
+ return x < maxInt;
+ }));
+
+ // Compare same-seed
+ krs1.setSeed(5000);
+ krs2.setSeed(5000);
+
+ generate(out1.begin(), out1.end(), [&]() {
+ return krs1.getInt(maxInt);
+ });
+ generate(out2.begin(), out2.end(), [&]() {
+ return krs2.getInt(maxInt);
+ });
+ QVERIFY(seqsAreEqual(out1, out2));
+ QVERIFY(all_of(out1.begin(), out1.end(), [&](int x) {
+ return x < maxInt;
+ }));
+ QVERIFY(all_of(out2.begin(), out2.end(), [&](int x) {
+ return x < maxInt;
+ }));
+
+ // Compare same-seed and assignment ctor
+
+ krs1 = KRandomSequence(8000);
+ krs2 = KRandomSequence(8000);
+
+ generate(out1.begin(), out1.end(), [&]() {
+ return krs1.getInt(maxInt);
+ });
+ generate(out2.begin(), out2.end(), [&]() {
+ return krs2.getInt(maxInt);
+ });
+ QVERIFY(seqsAreEqual(out1, out2));
+ QVERIFY(all_of(out1.begin(), out1.end(), [&](int x) {
+ return x < maxInt;
+ }));
+ QVERIFY(all_of(out2.begin(), out2.end(), [&](int x) {
+ return x < maxInt;
+ }));
+}
+#endif
+
+void KRandomTest::test_shuffle()
+{
+ {
+ QRandomGenerator rg(1);
+ QList<int> list = {1, 2, 3, 4, 5};
+ const QList<int> shuffled = {5, 2, 4, 3, 1};
+ KRandom::shuffle(list, &rg);
+ QCOMPARE(list, shuffled);
+ }
+
+ {
+ QRandomGenerator rg(1);
+ QVector<int> vector = {1, 2, 3, 4, 5};
+ const QVector<int> shuffled = {5, 2, 4, 3, 1};
+ KRandom::shuffle(vector, &rg);
+ QCOMPARE(vector, shuffled);
+ }
+
+ {
+ QRandomGenerator rg(1);
+ std::vector<int> std_vector = {1, 2, 3, 4, 5};
+ const std::vector<int> shuffled = {5, 2, 4, 3, 1};
+ KRandom::shuffle(std_vector, &rg);
+ QCOMPARE(std_vector, shuffled);
+ }
+}
+
+class KRandomTestThread : public QThread
+{
+protected:
+ void run() override
+ {
+ result = KRandom::randomString(32);
+ };
+
+public:
+ QString result;
+};
+
+void KRandomTest::test_randomStringThreaded()
+{
+ static const int size = 5;
+ KRandomTestThread *threads[size];
+ for (int i = 0; i < size; ++i) {
+ threads[i] = new KRandomTestThread();
+ threads[i]->start();
+ }
+ QSet<QString> results;
+ for (int i = 0; i < size; ++i) {
+ threads[i]->wait(2000);
+ results.insert(threads[i]->result);
+ }
+ // each thread should have returned a unique result
+ QCOMPARE(results.size(), size);
+ for (int i = 0; i < size; ++i) {
+ delete threads[i];
+ }
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 72)
+// Used by getChildRandSeq... outputs random numbers to stdout and then
+// exits the process.
+static void childGenRandom(int count)
+{
+ // No logic to 300, just wanted to avoid it accidentally being 2.4B...
+ if (count <= 0 || count > 300) {
+ exit(-1);
+ }
+
+ while (--count > 0) {
+ std::cout << KRandom::random() << ' ';
+ }
+
+ std::cout << KRandom::random() << '\n';
+ exit(0);
+}
+#endif
+
+// Manually implemented to dispatch to child process if needed to support
+// subtests
+int main(int argc, char *argv[])
+{
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 72)
+ if (argc > 1) {
+ childGenRandom(std::atoi(argv[1]));
+ Q_UNREACHABLE();
+ }
+#endif
+
+ binpath = argv[0];
+ KRandomTest randomTest;
+ return QTest::qExec(&randomTest);
+}
+
+#include "krandomtest.moc"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ SPDX-FileCopyrightText: 2012 David Faure <faure@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include <kshareddatacache.h>
+
+#include <QStandardPaths>
+#include <QTest>
+
+#include <QObject>
+#include <QStandardPaths>
+#include <QString>
+#include <string.h> // strcpy
+
+class KSharedDataCacheTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void initTestCase();
+ void simpleInsert();
+};
+
+void KSharedDataCacheTest::initTestCase()
+{
+}
+
+void KSharedDataCacheTest::simpleInsert()
+{
+ const QLatin1String cacheName("myTestCache");
+ const QLatin1String key("mypic");
+ // clear the cache
+ QString cacheFile = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/") + cacheName + QLatin1String(".kcache");
+ QFile file(cacheFile);
+ if (file.exists()) {
+ QVERIFY(file.remove());
+ }
+ // insert something into it
+ KSharedDataCache cache(cacheName, 5 * 1024 * 1024);
+#ifndef Q_OS_WIN // the windows implementation is currently only memory based and not really shared
+ QVERIFY(file.exists()); // make sure we got the cache filename right
+#endif
+ QByteArray data;
+ data.resize(9228);
+ strcpy(data.data(), "Hello world");
+ QVERIFY(cache.insert(key, data));
+ // read it out again
+ QByteArray result;
+ QVERIFY(cache.find(key, &result));
+ QCOMPARE(result, data);
+ // another insert
+ strcpy(data.data(), "Hello KDE");
+ QVERIFY(cache.insert(key, data));
+ // and another read
+ QVERIFY(cache.find(key, &result));
+ QCOMPARE(result, data);
+}
+
+QTEST_MAIN(KSharedDataCacheTest)
+
+#include "kshareddatacachetest.moc"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2003, 2007-2008 Oswald Buddenhagen <ossi@kde.org>
+ SPDX-FileCopyrightText: 2005 Thomas Braxton <brax108@cox.net>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include <kshell.h>
+#include <kuser.h>
+
+#include <QTest>
+
+#include <QDir>
+#include <QObject>
+#include <QString>
+#include <QStringList>
+
+class KShellTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void tildeExpand();
+ void tildeCollapse();
+ void quoteArg();
+ void joinArgs();
+ void splitJoin();
+ void quoteSplit();
+ void quoteSplit_data();
+ void abortOnMeta();
+};
+
+// The expansion of ~me isn't exactly QDir::homePath(), in case $HOME has a trailing slash, it's kept.
+static QString myHomePath()
+{
+#ifdef Q_OS_WIN
+ return QDir::homePath();
+#else
+ return QString::fromLocal8Bit(qgetenv("HOME"));
+#endif
+}
+
+void KShellTest::tildeExpand()
+{
+ QString me(KUser().loginName());
+ QCOMPARE(KShell::tildeExpand(QStringLiteral("~")), QDir::homePath());
+ QCOMPARE(KShell::tildeExpand(QStringLiteral("~/dir")), QString(QDir::homePath() + QStringLiteral("/dir")));
+ QCOMPARE(KShell::tildeExpand(QLatin1Char('~') + me), myHomePath());
+ QCOMPARE(KShell::tildeExpand(QLatin1Char('~') + me + QStringLiteral("/dir")), QString(myHomePath() + QStringLiteral("/dir")));
+#ifdef Q_OS_WIN
+ QCOMPARE(KShell::tildeExpand(QStringLiteral("^~") + me), QString(QLatin1Char('~') + me));
+#else
+ QCOMPARE(KShell::tildeExpand(QStringLiteral("\\~") + me), QString(QStringLiteral("~") + me));
+#endif
+}
+
+void KShellTest::tildeCollapse()
+{
+ QCOMPARE(KShell::tildeCollapse(QDir::homePath()), QStringLiteral("~"));
+ QCOMPARE(KShell::tildeCollapse(QDir::homePath() + QStringLiteral("/Documents")), QStringLiteral("~/Documents"));
+ QCOMPARE(KShell::tildeCollapse(QStringLiteral("/test/") + QDir::homePath()), QStringLiteral("/test/") + QDir::homePath());
+}
+
+void KShellTest::quoteArg()
+{
+#ifdef Q_OS_WIN
+ QCOMPARE(KShell::quoteArg(QStringLiteral("a space")), QStringLiteral("\"a space\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("fds\\\"")), QStringLiteral("fds\\\\\\^\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("\\\\foo")), QStringLiteral("\\\\foo"));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("\"asdf\"")), QStringLiteral("\\^\"asdf\\^\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("with\\")), QStringLiteral("\"with\\\\\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("\\\\")), QStringLiteral("\"\\\\\\\\\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("\"a space\\\"")), QStringLiteral("\\^\"\"a space\"\\\\\\^\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("as df\\")), QStringLiteral("\"as df\\\\\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("foo bar\"\\\"bla")), QStringLiteral("\"foo bar\"\\^\"\\\\\\^\"\"bla\""));
+ QCOMPARE(KShell::quoteArg(QStringLiteral("a % space")), QStringLiteral("\"a %PERCENT_SIGN% space\""));
+#else
+ QCOMPARE(KShell::quoteArg(QStringLiteral("a space")), QStringLiteral("'a space'"));
+#endif
+}
+
+void KShellTest::joinArgs()
+{
+ QStringList list;
+ list << QStringLiteral("this") << QStringLiteral("is") << QStringLiteral("a") << QStringLiteral("test");
+ QCOMPARE(KShell::joinArgs(list), QStringLiteral("this is a test"));
+}
+
+static QString sj(const QString &str, KShell::Options flags, KShell::Errors *ret)
+{
+ return KShell::joinArgs(KShell::splitArgs(str, flags, ret));
+}
+
+void KShellTest::splitJoin()
+{
+ KShell::Errors err = KShell::NoError;
+
+#ifdef Q_OS_WIN
+ QCOMPARE(sj(QStringLiteral("\"(sulli)\" text"), KShell::NoOptions, &err), QStringLiteral("\"(sulli)\" text"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral(" ha\\ lo "), KShell::NoOptions, &err), QStringLiteral("\"ha\\\\\" lo"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("say \" error"), KShell::NoOptions, &err), QString());
+ QVERIFY(err == KShell::BadQuoting);
+
+ QCOMPARE(sj(QStringLiteral("no \" error\""), KShell::NoOptions, &err), QStringLiteral("no \" error\""));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("say \" still error"), KShell::NoOptions, &err), QString());
+ QVERIFY(err == KShell::BadQuoting);
+
+ QCOMPARE(sj(QStringLiteral("BLA;asdf sdfess d"), KShell::NoOptions, &err), QStringLiteral("\"BLA;asdf\" sdfess d"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("B\"L\"A&sdf FOO|bar sdf wer "), KShell::NoOptions, &err), QStringLiteral("\"BLA&sdf\" \"FOO|bar\" sdf wer"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("\"\"\"just \"\" fine\"\"\""), KShell::NoOptions, &err), QStringLiteral("\\^\"\"just \"\\^\"\" fine\"\\^\""));
+ QVERIFY(err == KShell::NoError);
+#else
+ QCOMPARE(sj(QString::fromUtf8("\"~qU4rK\" 'text' 'jo'\"jo\" $'crap' $'\\\\\\'\\e\\x21' ha\\ lo \\a"), KShell::NoOptions, &err),
+ QString::fromUtf8("'~qU4rK' text jojo crap '\\'\\''\x1b!' 'ha lo' a"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("\"~qU4rK\" 'text'"), KShell::TildeExpand, &err), QStringLiteral("'~qU4rK' text"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("~\"qU4rK\" 'text'"), KShell::TildeExpand, &err), QStringLiteral("'~qU4rK' text"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("~/\"dir\" 'text'"), KShell::TildeExpand, &err), QString(QDir::homePath() + QStringLiteral("/dir text")));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("~ 'text' ~"), KShell::TildeExpand, &err), QString(QDir::homePath() + QStringLiteral(" text ") + QDir::homePath()));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("\\~ blah"), KShell::TildeExpand, &err), QStringLiteral("'~' blah"));
+ QVERIFY(err == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("~qU4rK ~") + KUser().loginName(), KShell::TildeExpand, &err), QString(QStringLiteral("'~qU4rK' ") + myHomePath()));
+ QVERIFY(err == KShell::NoError);
+
+ const QString unicodeSpaceFileName = QStringLiteral("test テスト.txt"); // #345140
+ QCOMPARE(sj(unicodeSpaceFileName, KShell::AbortOnMeta | KShell::TildeExpand, &err), unicodeSpaceFileName);
+ QVERIFY(err == KShell::NoError);
+#endif
+}
+
+void KShellTest::quoteSplit_data()
+{
+ QTest::addColumn<QString>("string");
+
+ QTest::newRow("no space") << QStringLiteral("hiho");
+ QTest::newRow("regular space") << QStringLiteral("hi there");
+ QTest::newRow("special space") << QString::fromUtf8("如何定期清潔典型的電風扇 講義.pdf");
+}
+
+void KShellTest::quoteSplit()
+{
+ QFETCH(QString, string);
+
+ // Splitting a quote arg should always just return one argument
+ const QStringList args = KShell::splitArgs(KShell::quoteArg(string));
+ QCOMPARE(args.count(), 1);
+}
+
+void KShellTest::abortOnMeta()
+{
+ KShell::Errors err1 = KShell::NoError, err2 = KShell::NoError;
+
+ QCOMPARE(sj(QStringLiteral("text"), KShell::AbortOnMeta, &err1), QStringLiteral("text"));
+ QVERIFY(err1 == KShell::NoError);
+
+#ifdef Q_OS_WIN
+ QVERIFY(KShell::splitArgs(QStringLiteral("BLA & asdf sdfess d"), KShell::AbortOnMeta, &err1).isEmpty());
+ QVERIFY(err1 == KShell::FoundMeta);
+
+ QVERIFY(KShell::splitArgs(QStringLiteral("foo %PATH% bar"), KShell::AbortOnMeta, &err1).isEmpty());
+ QVERIFY(err1 == KShell::FoundMeta);
+ QCOMPARE(sj(QStringLiteral("foo %PERCENT_SIGN% bar"), KShell::AbortOnMeta, &err1), QStringLiteral("foo %PERCENT_SIGN% bar"));
+ QVERIFY(err1 == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("@foo ^& bar"), KShell::AbortOnMeta, &err1), QStringLiteral("foo \"&\" bar"));
+ QVERIFY(err1 == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("\"BLA|asdf\" sdfess d"), KShell::AbortOnMeta, &err1), QStringLiteral("\"BLA|asdf\" sdfess d"));
+ QVERIFY(err1 == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("B\"L\"A\"|\"sdf \"FOO | bar\" sdf wer"), KShell::AbortOnMeta, &err1), QStringLiteral("\"BLA|sdf\" \"FOO | bar\" sdf wer"));
+ QVERIFY(err1 == KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("b-q me \\\\^|\\\\\\^\""), KShell::AbortOnMeta, &err1), QStringLiteral("b-q me \"\\\\|\"\\\\\\^\""));
+ QVERIFY(err1 == KShell::NoError);
+#else
+ QCOMPARE(sj(QStringLiteral("say \" error"), KShell::NoOptions, &err1), QString());
+ QVERIFY(err1 != KShell::NoError);
+
+ QCOMPARE(sj(QStringLiteral("say \" still error"), KShell::AbortOnMeta, &err1), QString());
+ QVERIFY(err1 != KShell::NoError);
+
+ QVERIFY(sj(QStringLiteral("say `echo no error`"), KShell::NoOptions, &err1) != sj(QStringLiteral("say `echo no error`"), KShell::AbortOnMeta, &err2));
+ QVERIFY(err1 != err2);
+
+ QVERIFY(sj(QStringLiteral("BLA=say echo meta"), KShell::NoOptions, &err1) != sj(QStringLiteral("BLA=say echo meta"), KShell::AbortOnMeta, &err2));
+ QVERIFY(err1 != err2);
+
+ QVERIFY(sj(QStringLiteral("B\"L\"A=say FOO=bar echo meta"), KShell::NoOptions, &err1)
+ == sj(QStringLiteral("B\"L\"A=say FOO=bar echo meta"), KShell::AbortOnMeta, &err2));
+#endif
+}
+
+QTEST_MAIN(KShellTest)
+
+#include "kshelltest.moc"
--- /dev/null
+
+#include "kstringhandlertest.h"
+
+#include <QRegularExpression>
+#include <QTest>
+
+QTEST_MAIN(KStringHandlerTest)
+
+#include "kstringhandler.h"
+
+QString KStringHandlerTest::test = QStringLiteral("The quick brown fox jumped over the lazy bridge. ");
+
+void KStringHandlerTest::capwords()
+{
+ QCOMPARE(KStringHandler::capwords(test), QStringLiteral("The Quick Brown Fox Jumped Over The Lazy Bridge. "));
+}
+
+void KStringHandlerTest::tagURLs()
+{
+ QString test = QStringLiteral("Click on https://foo@bar:www.kde.org/yoyo/dyne.html#a1 for info.");
+ QCOMPARE(KStringHandler::tagUrls(test),
+ QStringLiteral("Click on <a href=\"https://foo@bar:www.kde.org/yoyo/dyne.html#a1\">https://foo@bar:www.kde.org/yoyo/dyne.html#a1</a> for info."));
+
+ test = QStringLiteral("http://www.foo.org/story$806");
+ QCOMPARE(KStringHandler::tagUrls(test), QStringLiteral("<a href=\"http://www.foo.org/story$806\">http://www.foo.org/story$806</a>"));
+
+ test = QStringLiteral("http://www.foo.org/bla-(bli)");
+ QCOMPARE(KStringHandler::tagUrls(test), QStringLiteral("<a href=\"http://www.foo.org/bla-(bli)\">http://www.foo.org/bla-(bli)</a>"));
+
+ test = QStringLiteral("http://www.foo.org/bla-bli");
+ QCOMPARE(KStringHandler::tagUrls(test), QStringLiteral("<a href=\"http://www.foo.org/bla-bli\">http://www.foo.org/bla-bli</a>"));
+
+ // Test with Unicode characters
+ test = QStringLiteral("Click on https://foo@bar:www.kde.org/ÿöyo/dyne.html#a1 for info.");
+ QCOMPARE(KStringHandler::tagUrls(test),
+ QStringLiteral("Click on <a href=\"https://foo@bar:www.kde.org/ÿöyo/dyne.html#a1\">https://foo@bar:www.kde.org/ÿöyo/dyne.html#a1</a> for info."));
+}
+
+void KStringHandlerTest::perlSplitTextSep()
+{
+ QStringList expected;
+ expected << QStringLiteral("some") << QStringLiteral("string") << QStringLiteral("for") << QStringLiteral("you__here");
+ QCOMPARE(KStringHandler::perlSplit(QStringLiteral("__"), QStringLiteral("some__string__for__you__here"), 4), expected);
+
+ expected.clear();
+ expected << QStringLiteral("kparts") << QStringLiteral("reaches") << QStringLiteral("the parts other parts can't");
+ QCOMPARE(KStringHandler::perlSplit(QLatin1Char(' '), QStringLiteral("kparts reaches the parts other parts can't"), 3), expected);
+}
+
+void KStringHandlerTest::perlSplitRegexSep()
+{
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 67)
+ QCOMPARE(KStringHandler::perlSplit(QRegExp(QStringLiteral("[! ]")), QStringLiteral("Split me up ! I'm bored ! OK ?"), 3),
+ (QStringList{QStringLiteral("Split"), QStringLiteral("me"), QStringLiteral("up ! I'm bored ! OK ?")}));
+#endif
+ QCOMPARE(KStringHandler::perlSplit(QRegularExpression(QStringLiteral("[! ]")), QStringLiteral("Split me up ! I'm bored ! OK ?"), 3),
+ (QStringList{QStringLiteral("Split"), QStringLiteral("me"), QStringLiteral("up ! I'm bored ! OK ?")}));
+
+ QCOMPARE(KStringHandler::perlSplit(QRegularExpression(QStringLiteral("\\W")), QStringLiteral("aaa ggg cd ef"), 3),
+ (QStringList{QStringLiteral("aaa"), QStringLiteral("ggg"), QStringLiteral("cd ef")}));
+
+ // Test with Unicode characters
+ QCOMPARE(KStringHandler::perlSplit(QRegularExpression(QStringLiteral("\\W")), QStringLiteral("aaa gǵg cd ef"), 3),
+ (QStringList{QStringLiteral("aaa"), QStringLiteral("gǵg"), QStringLiteral("cd ef")}));
+}
+
+void KStringHandlerTest::obscure()
+{
+ // See bug 167900, obscure() produced chars that could not properly be converted to and from
+ // UTF8. The result was that storing passwords with '!' in them did not work.
+ QString test = QStringLiteral("!TEST!");
+ QString obscured = KStringHandler::obscure(test);
+ QByteArray obscuredBytes = obscured.toUtf8();
+ QCOMPARE(KStringHandler::obscure(QString::fromUtf8(obscuredBytes.constData())), test);
+}
+
+void KStringHandlerTest::preProcessWrap_data()
+{
+ const QChar zwsp(0x200b);
+
+ QTest::addColumn<QString>("string");
+ QTest::addColumn<QString>("expected");
+
+ // Should result in no additional breaks
+ QTest::newRow("spaces") << "foo bar baz"
+ << "foo bar baz";
+
+ // Should insert a ZWSP after each '_'
+ QTest::newRow("underscores") << "foo_bar_baz" << QString(QStringLiteral("foo_") + zwsp + QStringLiteral("bar_") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP after each '-'
+ QTest::newRow("hyphens") << "foo-bar-baz" << QString(QStringLiteral("foo-") + zwsp + QStringLiteral("bar-") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP after each '.'
+ QTest::newRow("periods") << "foo.bar.baz" << QString(QStringLiteral("foo.") + zwsp + QStringLiteral("bar.") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP after each ','
+ QTest::newRow("commas") << "foo,bar,baz" << QString(QStringLiteral("foo,") + zwsp + QStringLiteral("bar,") + zwsp + QStringLiteral("baz"));
+
+ // Should result in no additional breaks since the '_'s are followed by spaces
+ QTest::newRow("mixed underscores and spaces") << "foo_ bar_ baz"
+ << "foo_ bar_ baz";
+
+ // Should result in no additional breaks since the '_' is the last char
+ QTest::newRow("ends with underscore") << "foo_"
+ << "foo_";
+
+ // Should insert a ZWSP before '(' and after ')'
+ QTest::newRow("parens") << "foo(bar)baz" << QString(QStringLiteral("foo") + zwsp + QStringLiteral("(bar)") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP before '[' and after ']'
+ QTest::newRow("brackets") << "foo[bar]baz" << QString(QStringLiteral("foo") + zwsp + QStringLiteral("[bar]") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP before '{' and after '}'
+ QTest::newRow("curly braces") << "foo{bar}baz" << QString(QStringLiteral("foo") + zwsp + QStringLiteral("{bar}") + zwsp + QStringLiteral("baz"));
+
+ // Should insert a ZWSP before '(' but not after ')' since it's the last char
+ QTest::newRow("ends with ')'") << "foo(bar)" << QString(QStringLiteral("foo") + zwsp + QStringLiteral("(bar)"));
+
+ // Should insert a single ZWSP between the '_' and the '('
+ QTest::newRow("'_' followed by '('") << "foo_(bar)" << QString(QStringLiteral("foo_") + zwsp + QStringLiteral("(bar)"));
+
+ // Should insert ZWSP's between the '_' and the '[', between the double
+ // '['s and the double ']'s, but not before and after 'bar'
+ QTest::newRow("'_' before double brackets") << "foo_[[bar]]"
+ << QString(QStringLiteral("foo_") + zwsp + QStringLiteral("[") + zwsp + QStringLiteral("[bar]") + zwsp
+ + QStringLiteral("]"));
+
+ // Should only insert ZWSP's between the double '['s and the double ']'s
+ QTest::newRow("space before double brackets") << "foo [[bar]]"
+ << QString(QStringLiteral("foo [") + zwsp + QStringLiteral("[bar]") + zwsp + QStringLiteral("]"));
+
+ // Shouldn't result in any additional breaks since the '(' is preceded
+ // by a space, and the ')' is followed by a space.
+ QTest::newRow("parens with spaces") << "foo (bar) baz"
+ << "foo (bar) baz";
+
+ // Should insert a WJ (Word Joiner) before a single quote
+ const QChar wj(0x2060);
+ QTest::newRow("single quote") << "foo'bar" << QString(QStringLiteral("foo") + QString(wj) + QStringLiteral("'bar"));
+}
+
+static QString replaceZwsp(const QString &string)
+{
+ const QChar zwsp(0x200b);
+
+ QString result;
+ for (int i = 0; i < string.length(); i++)
+ if (string[i] == zwsp) {
+ result += QStringLiteral("<zwsp>");
+ } else {
+ result += string[i];
+ }
+
+ return result;
+}
+
+void KStringHandlerTest::preProcessWrap()
+{
+ QFETCH(QString, string);
+ QFETCH(QString, expected);
+
+ QCOMPARE(replaceZwsp(KStringHandler::preProcessWrap(string)), replaceZwsp(expected));
+}
+
+void KStringHandlerTest::logicalLength_data()
+{
+ QTest::addColumn<QString>("string");
+ QTest::addColumn<int>("expected");
+
+ QTest::newRow("Latin") << "foo bar baz" << 11;
+ QTest::newRow("Chinese") << QString::fromUtf8("\xe4\xbd\xa0\xe5\xa5\xbd") << 4;
+ QTest::newRow("Japanese") << QString::fromUtf8("\xe9\x9d\x92\xe3\x81\x84\xe7\xa9\xba") << 6;
+ QTest::newRow("Korean") << QString::fromUtf8("\xed\x95\x9c\xea\xb5\xad\xec\x96\xb4") << 6;
+ QTest::newRow("Mixed") << QString::fromUtf8("KDE\xe6\xa1\x8c\xe9\x9d\xa2") << 7;
+}
+
+void KStringHandlerTest::logicalLength()
+{
+ QFETCH(QString, string);
+ QFETCH(int, expected);
+ QCOMPARE(KStringHandler::logicalLength(string), expected);
+}
--- /dev/null
+#ifndef KSTRINGHANDLERTEST_H
+#define KSTRINGHANDLERTEST_H
+
+#include <QObject>
+
+class KStringHandlerTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void capwords();
+ void tagURLs();
+ void perlSplitTextSep();
+ void perlSplitRegexSep();
+ void obscure();
+ void preProcessWrap_data();
+ void preProcessWrap();
+ void logicalLength_data();
+ void logicalLength();
+
+private:
+ static QString test;
+};
+
+#endif
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2005 Ingo Kloecker <kloecker@kde.org>
+ SPDX-FileCopyrightText: 2007 Allen Winter <winter@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "ktexttohtmltest.h"
+#include "kcoreaddons_debug.h"
+
+#include "../src/lib/text/ktexttohtml.h"
+#include "../src/lib/text/ktexttohtml_p.h"
+
+#include <QDebug>
+#include <QTest>
+#include <QUrl>
+
+QTEST_MAIN(KTextToHTMLTest)
+
+Q_DECLARE_METATYPE(KTextToHTML::Options)
+
+#ifndef Q_OS_WIN
+void initLocale()
+{
+ setenv("LC_ALL", "en_US.utf-8", 1);
+}
+Q_CONSTRUCTOR_FUNCTION(initLocale)
+#endif
+
+void KTextToHTMLTest::testGetEmailAddress()
+{
+ // empty input
+ const QString emptyQString;
+ KTextToHTMLHelper ll1(emptyQString, 0);
+ QVERIFY(ll1.getEmailAddress().isEmpty());
+
+ // no '@' at scan position
+ KTextToHTMLHelper ll2(QStringLiteral("foo@bar.baz"), 0);
+ QVERIFY(ll2.getEmailAddress().isEmpty());
+
+ // '@' in local part
+ KTextToHTMLHelper ll3(QStringLiteral("foo@bar@bar.baz"), 7);
+ QVERIFY(ll3.getEmailAddress().isEmpty());
+
+ // empty local part
+ KTextToHTMLHelper ll4(QStringLiteral("@bar.baz"), 0);
+ QVERIFY(ll4.getEmailAddress().isEmpty());
+ KTextToHTMLHelper ll5(QStringLiteral(".@bar.baz"), 1);
+ QVERIFY(ll5.getEmailAddress().isEmpty());
+ KTextToHTMLHelper ll6(QStringLiteral(" @bar.baz"), 1);
+ QVERIFY(ll6.getEmailAddress().isEmpty());
+ KTextToHTMLHelper ll7(QStringLiteral(".!#$%&'*+-/=?^_`{|}~@bar.baz"), qstrlen(".!#$%&'*+-/=?^_`{|}~"));
+ QVERIFY(ll7.getEmailAddress().isEmpty());
+
+ // allowed special chars in local part of address
+ KTextToHTMLHelper ll8(QStringLiteral("a.!#$%&'*+-/=?^_`{|}~@bar.baz"), qstrlen("a.!#$%&'*+-/=?^_`{|}~"));
+ QCOMPARE(ll8.getEmailAddress(), QStringLiteral("a.!#$%&'*+-/=?^_`{|}~@bar.baz"));
+
+ // '@' in domain part
+ KTextToHTMLHelper ll9(QStringLiteral("foo@bar@bar.baz"), 3);
+ QVERIFY(ll9.getEmailAddress().isEmpty());
+
+ // domain part without dot
+ KTextToHTMLHelper lla(QStringLiteral("foo@bar"), 3);
+ QVERIFY(lla.getEmailAddress().isEmpty());
+ KTextToHTMLHelper llb(QStringLiteral("foo@bar."), 3);
+ QVERIFY(llb.getEmailAddress().isEmpty());
+ KTextToHTMLHelper llc(QStringLiteral(".foo@bar"), 4);
+ QVERIFY(llc.getEmailAddress().isEmpty());
+ KTextToHTMLHelper lld(QStringLiteral("foo@bar "), 3);
+ QVERIFY(lld.getEmailAddress().isEmpty());
+ KTextToHTMLHelper lle(QStringLiteral(" foo@bar"), 4);
+ QVERIFY(lle.getEmailAddress().isEmpty());
+ KTextToHTMLHelper llf(QStringLiteral("foo@bar-bar"), 3);
+ QVERIFY(llf.getEmailAddress().isEmpty());
+
+ // empty domain part
+ KTextToHTMLHelper llg(QStringLiteral("foo@"), 3);
+ QVERIFY(llg.getEmailAddress().isEmpty());
+ KTextToHTMLHelper llh(QStringLiteral("foo@."), 3);
+ QVERIFY(llh.getEmailAddress().isEmpty());
+ KTextToHTMLHelper lli(QStringLiteral("foo@-"), 3);
+ QVERIFY(lli.getEmailAddress().isEmpty());
+
+ // simple address
+ KTextToHTMLHelper llj(QStringLiteral("foo@bar.baz"), 3);
+ QCOMPARE(llj.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper llk(QStringLiteral("foo@bar.baz."), 3);
+ QCOMPARE(llk.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper lll(QStringLiteral(".foo@bar.baz"), 4);
+ QCOMPARE(lll.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper llm(QStringLiteral("foo@bar.baz-"), 3);
+ QCOMPARE(llm.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper lln(QStringLiteral("-foo@bar.baz"), 4);
+ QCOMPARE(lln.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper llo(QStringLiteral("foo@bar.baz "), 3);
+ QCOMPARE(llo.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper llp(QStringLiteral(" foo@bar.baz"), 4);
+ QCOMPARE(llp.getEmailAddress(), QStringLiteral("foo@bar.baz"));
+ KTextToHTMLHelper llq(QStringLiteral("foo@bar-bar.baz"), 3);
+ QCOMPARE(llq.getEmailAddress(), QStringLiteral("foo@bar-bar.baz"));
+}
+
+void KTextToHTMLTest::testGetUrl()
+{
+ QStringList brackets;
+ brackets << QString() << QString(); // no brackets
+ brackets << QStringLiteral("<") << QStringLiteral(">");
+ brackets << QStringLiteral("[") << QStringLiteral("]");
+ brackets << QStringLiteral("\"") << QStringLiteral("\"");
+ brackets << QStringLiteral("<link>") << QStringLiteral("</link>");
+
+ for (int i = 0; i < brackets.count(); i += 2) {
+ testGetUrl2(brackets[i], brackets[i + 1]);
+ }
+}
+
+void KTextToHTMLTest::testGetUrl2(const QString &left, const QString &right)
+{
+ QStringList schemas;
+ schemas << QStringLiteral("http://");
+ schemas << QStringLiteral("https://");
+ schemas << QStringLiteral("vnc://");
+ schemas << QStringLiteral("fish://");
+ schemas << QStringLiteral("ftp://");
+ schemas << QStringLiteral("ftps://");
+ schemas << QStringLiteral("sftp://");
+ schemas << QStringLiteral("smb://");
+ schemas << QStringLiteral("file://");
+ schemas << QStringLiteral("irc://");
+ schemas << QStringLiteral("ircs://");
+
+ QStringList urls;
+ urls << QStringLiteral("www.kde.org");
+ urls << QStringLiteral("user@www.kde.org");
+ urls << QStringLiteral("user:pass@www.kde.org");
+ urls << QStringLiteral("user:pass@www.kde.org:1234");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path?a=1");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path?a=1#anchor");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/\npath \n /long/ path \t ?a=1#anchor");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path/special(123)?a=1#anchor");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor[bla");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor[bla]");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/\nsub/path:with:colon/\nspecial(123)?\na=1#anchor[bla]");
+ urls << QStringLiteral("user:pass@www.kde.org:1234/ \n sub/path:with:colon/ \n\t \t special(123)?") + QStringLiteral("\n\t \n\t a=1#anchor[bla]");
+
+ for (const QString &schema : qAsConst(schemas)) {
+ for (QString url : qAsConst(urls)) {
+ // by definition: if the URL is enclosed in brackets, the URL itself is not allowed
+ // to contain the closing bracket, as this would be detected as the end of the URL
+ if ((left.length() == 1) && (url.contains(right[0]))) {
+ continue;
+ }
+
+ // if the url contains a whitespace, it must be enclosed with brackets
+ if ((url.contains(QLatin1Char('\n')) || url.contains(QLatin1Char('\t')) || url.contains(QLatin1Char(' '))) && left.isEmpty()) {
+ continue;
+ }
+
+ QString test(left + schema + url + right);
+ KTextToHTMLHelper ll(test, left.length());
+ QString gotUrl = ll.getUrl();
+
+ // we want to have the url without whitespace
+ url.remove(QLatin1Char(' '));
+ url.remove(QLatin1Char('\n'));
+ url.remove(QLatin1Char('\t'));
+
+ bool ok = (gotUrl == (schema + url));
+ if (!ok) {
+ qCDebug(KCOREADDONS_DEBUG) << "got:" << gotUrl;
+ }
+ QVERIFY2(ok, qPrintable(test));
+ }
+ }
+
+ QStringList urlsWithoutSchema;
+ urlsWithoutSchema << QStringLiteral(".kde.org");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path?a=1");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path?a=1#anchor");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path/special(123)?a=1#anchor");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor[bla");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/sub/path:with:colon/special(123)?a=1#anchor[bla]");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/\nsub/path:with:colon/\nspecial(123)?\na=1#anchor[bla]");
+ urlsWithoutSchema << QStringLiteral(".kde.org:1234/ \n sub/path:with:colon/ \n\t \t special(123)?") + QStringLiteral("\n\t \n\t a=1#anchor[bla]");
+
+ QStringList starts;
+ starts << QStringLiteral("www") << QStringLiteral("ftp") << QStringLiteral("news:www");
+
+ for (const QString &start : qAsConst(starts)) {
+ for (QString url : qAsConst(urlsWithoutSchema)) {
+ // by definition: if the URL is enclosed in brackets, the URL itself is not allowed
+ // to contain the closing bracket, as this would be detected as the end of the URL
+ if ((left.length() == 1) && (url.contains(right[0]))) {
+ continue;
+ }
+
+ // if the url contains a whitespace, it must be enclosed with brackets
+ if ((url.contains(QLatin1Char('\n')) || url.contains(QLatin1Char('\t')) || url.contains(QLatin1Char(' '))) && left.isEmpty()) {
+ continue;
+ }
+
+ QString test(left + start + url + right);
+ KTextToHTMLHelper ll(test, left.length());
+ QString gotUrl = ll.getUrl();
+
+ // we want to have the url without whitespace
+ url.remove(QLatin1Char(' '));
+ url.remove(QLatin1Char('\n'));
+ url.remove(QLatin1Char('\t'));
+
+ bool ok = (gotUrl == (start + url));
+ if (!ok) {
+ qCDebug(KCOREADDONS_DEBUG) << "got:" << gotUrl;
+ }
+ QVERIFY2(ok, qPrintable(gotUrl));
+ }
+ }
+
+ // test max url length
+ QString url = QStringLiteral("https://www.kde.org/this/is/a_very_loooooong_url/test/test/test");
+ {
+ KTextToHTMLHelper ll(url, 0, 10);
+ QVERIFY(ll.getUrl().isEmpty()); // url too long
+ }
+ {
+ KTextToHTMLHelper ll(url, 0, url.length() - 1);
+ QVERIFY(ll.getUrl().isEmpty()); // url too long
+ }
+ {
+ KTextToHTMLHelper ll(url, 0, url.length());
+ QCOMPARE(ll.getUrl(), url);
+ }
+ {
+ KTextToHTMLHelper ll(url, 0, url.length() + 1);
+ QCOMPARE(ll.getUrl(), url);
+ }
+
+ // mailto
+ {
+ QString addr = QStringLiteral("mailto:test@kde.org");
+ QString test(left + addr + right);
+ KTextToHTMLHelper ll(test, left.length());
+
+ QString gotUrl = ll.getUrl();
+
+ bool ok = (gotUrl == addr);
+ if (!ok) {
+ qCDebug(KCOREADDONS_DEBUG) << "got:" << gotUrl;
+ }
+ QVERIFY2(ok, qPrintable(gotUrl));
+ }
+}
+
+void KTextToHTMLTest::testHtmlConvert_data()
+{
+ QTest::addColumn<QString>("plainText");
+ QTest::addColumn<KTextToHTML::Options>("flags");
+ QTest::addColumn<QString>("htmlText");
+
+ // Linker error when using PreserveSpaces, therefore the hardcoded 0x01 or 0x09
+
+ // Test preserving whitespace correctly
+ QTest::newRow("") << " foo" << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << " foo";
+ QTest::newRow("") << " foo" << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << " foo";
+ QTest::newRow("") << " foo " << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << " foo ";
+ QTest::newRow("") << " foo " << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << " foo ";
+ QTest::newRow("") << "bla bla bla bla bla" << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << "bla bla bla bla bla";
+ QTest::newRow("") << "bla bla bla \n bla bla bla " << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "bla bla bla <br />\n bla bla bla ";
+ QTest::newRow("") << "bla bla bla" << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << "bla bla bla";
+ QTest::newRow("") << " bla bla \n bla bla a\n bla bla " << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << " bla bla <br />\n bla bla a<br />\n"
+ " bla bla ";
+
+ // Test highlighting with *, / and _
+ QTest::newRow("") << "Ce paragraphe _contient_ des mots ou des _groupes de mots_ à mettre en"
+ " forme…"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "Ce paragraphe <u>_contient_</u> des mots ou des"
+ " <u>_groupes de mots_</u> à mettre en forme…";
+ QTest::newRow("punctation-bug") << "Ce texte *a l'air* de _fonctionner_, à condition"
+ " d’utiliser le guillemet ASCII."
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "Ce texte <b>*a l'air*</b> de <u>_fonctionner_</u>, à"
+ " condition d’utiliser le guillemet ASCII.";
+ QTest::newRow("punctation-bug") << "Un répertoire /est/ un *dossier* où on peut mettre des"
+ " *fichiers*."
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "Un répertoire <i>/est/</i> un"
+ " <b>*dossier*</b> où on peut mettre des <b>*fichiers*</b>.";
+ QTest::newRow("punctation-bug") << "*BLA BLA BLA BLA*." << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "<b>BLA BLA BLA BLA</b>.";
+ QTest::newRow("") << "Je vais tenter de repérer des faux positif*" << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "Je vais tenter de repérer des faux positif*";
+ QTest::newRow("") << "*Ouais !* *Yes!*" << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "<b>*Ouais !*</b> <b>*Yes!*</b>";
+
+ QTest::newRow("multispace") << "*Ouais foo*" << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "<b>*Ouais foo*</b>";
+
+ QTest::newRow("multispace3") << "*Ouais: foo*" << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "<b>*Ouais: foo*</b>";
+
+ QTest::newRow("multi-") << "** Ouais: foo **" << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "** Ouais: foo **";
+
+ QTest::newRow("multi-") << "*** Ouais: foo ***" << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "*** Ouais: foo ***";
+
+ QTest::newRow("nohtmlversion") << "* Ouais: foo *" << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "* Ouais: foo *";
+
+ QTest::newRow("nohtmlversion2") << "*Ouais: foo *" << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "*Ouais: foo *";
+
+ QTest::newRow("nohtmlversion3") << "* Ouais: foo*" << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "* Ouais: foo*";
+
+ QTest::newRow("nohtmlversion3") << "* Ouais: *ff sfsdf* foo *" << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "* Ouais: <b>*ff sfsdf*</b> foo *";
+
+ QTest::newRow("") << "the /etc/{rsyslog.d,syslog-ng.d}/package.rpmnew file"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText)
+ << "the /etc/{rsyslog.d,syslog-ng.d}/package.rpmnew file";
+
+ // This test has problems with the encoding, apparently.
+ // QTest::newRow( "" ) << "*Ça fait plaisir de pouvoir utiliser des lettres accentuées dans du"
+ // " texte mis en forme*." << 0x09 << "<b>Ça fait plaisir de pouvoir"
+ // " utiliser des lettres accentuées dans du texte mis en forme</b>.";
+
+ // Bug reported by dfaure, the <hostname> would get lost
+ QTest::newRow("") << "QUrl url(\"http://strange<hostname>/\");" << KTextToHTML::Options(KTextToHTML::ReplaceSmileys | KTextToHTML::HighlightText)
+ << "QUrl url("<a href=\"http://strange<hostname>/\">"
+ "http://strange<hostname>/</a>");";
+
+ // Bug: 211128 - plain text emails should not replace ampersand & with &
+ QTest::newRow("bug211128") << "https://green-site/?Ticket=85&Page=next" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a href=\"https://green-site/?Ticket=85&Page=next\">"
+ "https://green-site/?Ticket=85&Page=next</a>";
+
+ QTest::newRow("dotBeforeEnd") << "Look at this file: www.example.com/example.h" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "Look at this file: <a href=\"http://www.example.com/example.h\">"
+ "www.example.com/example.h</a>";
+ QTest::newRow("dotInMiddle") << "Look at this file: www.example.com/.bashrc" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "Look at this file: <a href=\"http://www.example.com/.bashrc\">"
+ "www.example.com/.bashrc</a>";
+
+ // A dot at the end of an URL is explicitly ignored
+ QTest::newRow("dotAtEnd") << "Look at this file: www.example.com/test.cpp." << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "Look at this file: <a href=\"http://www.example.com/test.cpp\">"
+ "www.example.com/test.cpp</a>.";
+
+ // Bug 313719 - URL in parenthesis
+ QTest::newRow("url-in-parenthesis-1") << "KDE (website https://www.kde.org)" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "KDE (website <a href=\"https://www.kde.org\">https://www.kde.org</a>)";
+ QTest::newRow("url-in-parenthesis-2") << "KDE website (https://www.kde.org)" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "KDE website (<a href=\"https://www.kde.org\">https://www.kde.org</a>)";
+ QTest::newRow("url-in-parenthesis-3") << "bla (https://www.kde.org - section 5.2)" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "bla (<a href=\"https://www.kde.org\">https://www.kde.org</a> - section 5.2)";
+
+ // Fix url as foo <<url> <url>> when we concatened them.
+ QTest::newRow("url-with-url")
+ << "foo <https://www.kde.org/ <https://www.kde.org/>>" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "foo <<a href=\"https://www.kde.org/ \">https://www.kde.org/ </a><<a href=\"https://www.kde.org/\">https://www.kde.org/</a>>>";
+
+ // Fix url exploit
+ QTest::newRow("url-exec-html") << "https://\"><!--" << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << "https://"><!--";
+
+ QTest::newRow("url-exec-html-2") << "https://192.168.1.1:\"><!--" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "https://192.168.1.1:"><!--";
+
+ QTest::newRow("url-exec-html-3") << "https://<IP>:\"><!--" << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << "https://<IP>:"><!--";
+
+ QTest::newRow("url-exec-html-4") << "https://<IP>:/\"><!--" << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << "https://<IP>:/"><!--";
+
+ QTest::newRow("url-exec-html-5") << "https://<IP>:/\"><script>alert(1);</script><!--" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "https://<IP>:/"><script>alert(1);</script><!--";
+
+ QTest::newRow("url-exec-html-6") << "https://<IP>:/\"><script>alert(1);</script><!--\nTest2" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "https://<IP>:/"><script>alert(1);</script><!--\nTest2";
+
+ QTest::newRow("url-with-ref-in-[") << "https://www.kde.org[1]" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a href=\"https://www.kde.org\">https://www.kde.org</a>[1]";
+
+ QTest::newRow("url-with-ref-in-[2") << "[http://www.example.org/][whatever]" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "[<a href=\"http://www.example.org/\">http://www.example.org/</a>][whatever]";
+ // Bug 346132
+ QTest::newRow("url-with-ref-in-<") << "http://www.foo.bar<http://foo.bar/>" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a href=\"http://www.foo.bar\">http://www.foo.bar</a><<a href=\"http://foo.bar/\">http://foo.bar/</a>>";
+
+ QTest::newRow("url-with-ref-in-]") << "[Please visit our booth 24-25 http://example.com/]" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "[Please visit our booth 24-25 <a href=\"http://example.com/\">http://example.com/</a>]";
+
+ QTest::newRow("two url with space") << "http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a href=\"http://www.kde.org/standards/kcfg/1.0\">http://www.kde.org/standards/kcfg/1.0</a> <a "
+ "href=\"http://www.kde.org/\">http://www.kde.org/</a>";
+
+ // Bug kmail
+ QTest::newRow("two url with space-2")
+ << "@@ -55,6 +55,10 @@ xsi:schemaLocation=\"http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "@@ -55,6 +55,10 @@ xsi:schemaLocation="<a href=\"http://www.kde.org/standards/kcfg/1.0\">http://www.kde.org/standards/kcfg/1.0</a> <a "
+ "href=\"http://www.kde.org/\">http://www.kde.org/</a>";
+
+ const auto opt = KTextToHTML::PreserveSpaces | KTextToHTML::ConvertPhoneNumbers;
+ // tel: urls
+ QTest::newRow("tel url compact") << "bla bla <tel:+491234567890> bla bla" << opt
+ << "bla bla <<a href=\"tel:+491234567890\">tel:+491234567890</a>> bla bla";
+ QTest::newRow("tel url fancy") << "bla bla tel:+49-321-123456 bla bla" << opt << "bla bla <a href=\"tel:+49-321-123456\">tel:+49-321-123456</a> bla bla";
+
+ // negative tel: url tests
+ QTest::newRow("empty tel url") << "bla tel: blub" << opt << "bla tel: blub";
+
+ // phone numbers
+ QTest::newRow("tel compact international") << "call +49123456789, then hang up" << opt
+ << "call <a href=\"tel:+49123456789\">+49123456789</a>, then hang up";
+ QTest::newRow("tel parenthesis/spaces international")
+ << "phone:+33 (01) 12 34 56 78 blub" << opt << "phone:<a href=\"tel:+330112345678\">+33 (01) 12 34 56 78</a> blub";
+ QTest::newRow("tel dashes international") << "bla +44-321-1-234-567" << opt << "bla <a href=\"tel:+443211234567\">+44-321-1-234-567</a>";
+ QTest::newRow("tel dashes/spaces international") << "+1 123-456-7000 blub" << opt << "<a href=\"tel:+11234567000\">+1 123-456-7000</a> blub";
+ QTest::newRow("tel spaces international") << "bla +32 1 234 5678 blub" << opt << "bla <a href=\"tel:+3212345678\">+32 1 234 5678</a> blub";
+ QTest::newRow("tel slash domestic") << "bla 030/12345678 blub" << opt << "bla <a href=\"tel:03012345678\">030/12345678</a> blub";
+ QTest::newRow("tel slash/space domestic") << "Tel.: 089 / 12 34 56 78" << opt << "Tel.: <a href=\"tel:08912345678\">089 / 12 34 56 78</a>";
+ QTest::newRow("tel follow by parenthesis") << "Telefon: 0 18 05 / 12 23 46 (14 Cent/Min.*)" << opt
+ << "Telefon: <a href=\"tel:01805122346\">0 18 05 / 12 23 46</a> (14 Cent/Min.*)";
+ QTest::newRow("tel space single digit at end") << "0123/123 456 7" << opt << "<a href=\"tel:01231234567\">0123/123 456 7</a>";
+ QTest::newRow("tel space around dash") << "bla +49 (0) 12 23 - 45 6000 blub" << opt
+ << "bla <a href=\"tel:+4901223456000\">+49 (0) 12 23 - 45 6000</a> blub";
+ QTest::newRow("tel two numbers speparated by dash")
+ << "bla +49 (0) 12 23 46 78 - +49 0123/123 456 78 blub" << opt
+ << "bla <a href=\"tel:+49012234678\">+49 (0) 12 23 46 78</a> - <a href=\"tel:+49012312345678\">+49 0123/123 456 78</a> blub";
+
+ // negative tests for phone numbers
+ QTest::newRow("non-tel number") << "please send 1200 cakes" << opt << "please send 1200 cakes";
+ QTest::newRow("non-tel alpha-numeric") << "bla 1-123-456-ABCD blub" << opt << "bla 1-123-456-ABCD blub";
+ QTest::newRow("non-tel alpha prefix") << "ABCD0123-456-789" << opt << "ABCD0123-456-789";
+ QTest::newRow("non-tel date") << "bla 02/03/2019 blub" << opt << "bla 02/03/2019 blub";
+ QTest::newRow("non-tel too long") << "bla +012-4567890123456 blub" << opt << "bla +012-4567890123456 blub";
+ QTest::newRow("non-tel unbalanced") << "bla +012-456789(01 blub" << opt << "bla +012-456789(01 blub";
+ QTest::newRow("non-tel nested") << "bla +012-4(56(78)90)1 blub" << opt << "bla +012-4(56(78)90)1 blub";
+ QTest::newRow("tel extraction disabled") << "call +49123456789 now" << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << "call +49123456789 now";
+
+ QTest::newRow("bug-414360")
+ << "https://www.openstreetmap.org/directions?engine=graphhopper_foot&route=44.85765%2C-0.55931%3B44.85713%2C-0.56117#map=18/44.85756/-0.56094"
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a "
+ "href=\"https://www.openstreetmap.org/directions?engine=graphhopper_foot&route=44.85765%2C-0.55931%3B44.85713%2C-0.56117#map=18/44.85756/"
+ "-0.56094\">https://www.openstreetmap.org/directions?engine=graphhopper_foot&route=44.85765%2C-0.55931%3B44.85713%2C-0.56117#map=18/44.85756/"
+ "-0.56094</a>";
+
+ // xmpp bug 422291
+ QTest::newRow("xmpp1") << "xmpp:username@server.tld" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a href=\"xmpp:username@server.tld\">xmpp:username@server.tld</a>";
+ QTest::newRow("xmpp2") << "xmpp:conversations@conference.siacs.eu" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a href=\"xmpp:conversations@conference.siacs.eu\">xmpp:conversations@conference.siacs.eu</a>";
+ QTest::newRow("xmpp3") << "xmpp:conversations@conference.siacs.eu?join" << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
+ << "<a href=\"xmpp:conversations@conference.siacs.eu?join\">xmpp:conversations@conference.siacs.eu?join</a>";
+
+ // Test news: only
+ QTest::newRow("news") << "news: " << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << "news: ";
+
+ QTest::newRow("ftp") << "ftp: " << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << "ftp: ";
+ QTest::newRow("mailto") << "mailto: " << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << "mailto: ";
+ QTest::newRow("empty") << "" << KTextToHTML::Options(KTextToHTML::PreserveSpaces) << "";
+}
+
+void KTextToHTMLTest::testHtmlConvert()
+{
+ QFETCH(QString, plainText);
+ QFETCH(KTextToHTML::Options, flags);
+ QFETCH(QString, htmlText);
+
+ QEXPECT_FAIL("punctation-bug", "Linklocator does not properly detect punctation as boundaries", Continue);
+
+ const QString actualHtml = KTextToHTML::convertToHtml(plainText, flags);
+ QCOMPARE(actualHtml, htmlText);
+}
+
+void KTextToHTMLTest::benchHtmlConvert_data()
+{
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<KTextToHTML::Options>("options");
+
+ auto text = QStringLiteral("foo bar asdf :)").repeated(1000);
+ QTest::newRow("plain") << text << KTextToHTML::Options();
+ QTest::newRow("preserve-spaces") << text << KTextToHTML::Options(KTextToHTML::PreserveSpaces);
+ QTest::newRow("highlight-text") << text << KTextToHTML::Options(KTextToHTML::HighlightText);
+ QTest::newRow("replace-smileys") << text << KTextToHTML::Options(KTextToHTML::ReplaceSmileys);
+ QTest::newRow("preserve-spaces+highlight-text") << text << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText);
+ QTest::newRow("preserve-spaces+highlight-text+replace-smileys")
+ << text << KTextToHTML::Options(KTextToHTML::PreserveSpaces | KTextToHTML::HighlightText | KTextToHTML::ReplaceSmileys);
+}
+
+void KTextToHTMLTest::benchHtmlConvert()
+{
+ QFETCH(QString, text);
+ QFETCH(KTextToHTML::Options, options);
+
+ QBENCHMARK {
+ const QString html = KTextToHTML::convertToHtml(text, options);
+ Q_UNUSED(html);
+ }
+}
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2007 Allen Winter <winter@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KTEXTTOHTMLTEST_H
+#define KTEXTTOHTMLTEST_H
+
+#include <QObject>
+
+class KTextToHTMLTest : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void testGetEmailAddress();
+ void testGetUrl();
+ void testHtmlConvert();
+ void testHtmlConvert_data();
+
+ void benchHtmlConvert();
+ void benchHtmlConvert_data();
+
+private:
+ void testGetUrl2(const QString &left, const QString &right);
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ SPDX-FileCopyrightText: 2005 David Faure <faure@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kurlmimedatatest.h"
+#include <QMimeData>
+#include <QTest>
+#include <kurlmimedata.h>
+
+QTEST_MAIN(KUrlMimeDataTest)
+
+void KUrlMimeDataTest::testURLList()
+{
+ QMimeData *mimeData = new QMimeData();
+ QVERIFY(!mimeData->hasUrls());
+
+ QList<QUrl> urls;
+ urls.append(QUrl(QLatin1String("https://www.kde.org")));
+ urls.append(QUrl(QLatin1String("http://wstephenson:secret@example.com/path")));
+ urls.append(QUrl(QLatin1String("file:///home/dfaure/konqtests/Mat%C3%A9riel")));
+ QMap<QString, QString> metaData;
+ metaData[QLatin1String("key")] = QLatin1String("value");
+ metaData[QLatin1String("key2")] = QLatin1String("value2");
+
+ KUrlMimeData::setUrls(QList<QUrl>(), urls, mimeData);
+ KUrlMimeData::setMetaData(metaData, mimeData);
+
+ QVERIFY(mimeData->hasUrls());
+ QVERIFY(mimeData->hasText());
+
+ QMap<QString, QString> decodedMetaData;
+ QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
+ QVERIFY(!decodedURLs.isEmpty());
+ QList<QUrl> expectedUrls = urls;
+ expectedUrls[1] = QUrl(QLatin1String("http://wstephenson:secret@example.com/path")); // password kept, unlike in KDE4, but that's okay, it's not displayed
+ QCOMPARE(expectedUrls, decodedURLs);
+
+ const QList<QUrl> qurls = mimeData->urls();
+ QCOMPARE(qurls.count(), urls.count());
+ for (int i = 0; i < qurls.count(); ++i) {
+ QCOMPARE(qurls[i], decodedURLs[i]);
+ }
+
+ QVERIFY(!decodedMetaData.isEmpty());
+ QCOMPARE(decodedMetaData[QLatin1String("key")], QString::fromLatin1("value"));
+ QCOMPARE(decodedMetaData[QLatin1String("key2")], QString::fromLatin1("value2"));
+
+ delete mimeData;
+}
+
+void KUrlMimeDataTest::testOneURL()
+{
+ QUrl oneURL(QLatin1String("file:///tmp"));
+ QList<QUrl> oneEltList;
+ oneEltList.append(oneURL);
+ QMimeData *mimeData = new QMimeData();
+
+ KUrlMimeData::setUrls(QList<QUrl>(), oneEltList, mimeData);
+ QVERIFY(mimeData->hasUrls());
+
+ QMap<QString, QString> decodedMetaData;
+ QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
+ QVERIFY(!decodedURLs.isEmpty());
+ QCOMPARE(decodedURLs.count(), 1);
+ QCOMPARE(decodedURLs[0], oneURL);
+ QVERIFY(decodedMetaData.isEmpty());
+ delete mimeData;
+}
+
+void KUrlMimeDataTest::testFromQUrl()
+{
+ QList<QUrl> qurls;
+ qurls.append(QUrl(QLatin1String("https://www.kde.org")));
+ qurls.append(QUrl(QLatin1String("file:///home/dfaure/konqtests/Mat%C3%A9riel")));
+ QMimeData *mimeData = new QMimeData();
+ KUrlMimeData::setUrls(QList<QUrl>(), qurls, mimeData);
+ QVERIFY(mimeData->hasUrls());
+
+ QMap<QString, QString> decodedMetaData;
+ QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
+ QVERIFY(!decodedURLs.isEmpty());
+ QCOMPARE(decodedURLs.count(), 2);
+ QCOMPARE(decodedURLs[0], qurls[0]);
+ QCOMPARE(decodedURLs[1], qurls[1]);
+ QVERIFY(decodedMetaData.isEmpty());
+ delete mimeData;
+}
+
+void KUrlMimeDataTest::testMostLocalUrlList_data()
+{
+ QTest::addColumn<bool>("withKdeUrls");
+ QTest::addColumn<bool>("withLocalUrls");
+ QTest::addColumn<bool>("expectedLocalUrls");
+
+ QTest::newRow("both") << true << true << false;
+ QTest::newRow("local_only") << false << true << true;
+ QTest::newRow("kde_only") << true << false << false;
+}
+
+void KUrlMimeDataTest::testMostLocalUrlList()
+{
+ QFETCH(bool, withKdeUrls);
+ QFETCH(bool, withLocalUrls);
+ QFETCH(bool, expectedLocalUrls);
+
+ QMimeData *mimeData = new QMimeData();
+ QList<QUrl> urls;
+ urls.append(QUrl(QLatin1String("desktop:/foo")));
+ urls.append(QUrl(QLatin1String("desktop:/bar")));
+ QList<QUrl> localUrls;
+ localUrls.append(QUrl(QLatin1String("file:/home/dfaure/Desktop/foo")));
+ localUrls.append(QUrl(QLatin1String("file:/home/dfaure/Desktop/bar")));
+
+ if (withKdeUrls && withLocalUrls) {
+ KUrlMimeData::setUrls(urls, localUrls, mimeData);
+ } else if (withKdeUrls) {
+ KUrlMimeData::setUrls(urls, {}, mimeData);
+ } else if (withLocalUrls) {
+ KUrlMimeData::setUrls({}, localUrls, mimeData);
+ }
+
+ QVERIFY(mimeData->hasUrls());
+ QVERIFY(mimeData->hasText());
+ // The support for urls is done in hasText, a direct call to hasFormat will say false.
+ // QVERIFY(mimeData->hasFormat(QLatin1String("text/plain")));
+
+ // urlsFromMimeData decodes the real "kde" urls by default, if any
+ QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData);
+ QVERIFY(!decodedURLs.isEmpty());
+ if (expectedLocalUrls) {
+ QCOMPARE(decodedURLs, localUrls);
+ } else {
+ QCOMPARE(decodedURLs, urls);
+ }
+
+ // urlsFromMimeData can also be told to decode the "most local" urls
+ decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferLocalUrls);
+ QVERIFY(!decodedURLs.isEmpty());
+ if (withLocalUrls) {
+ QCOMPARE(decodedURLs, localUrls);
+ } else {
+ QCOMPARE(decodedURLs, urls);
+ }
+
+ // QMimeData decodes the "most local" urls
+ const QList<QUrl> qurls = mimeData->urls();
+ if (withLocalUrls) {
+ QCOMPARE(qurls.count(), localUrls.count());
+ for (int i = 0; i < qurls.count(); ++i) {
+ QCOMPARE(qurls[i], static_cast<QUrl>(localUrls[i]));
+ }
+ } else {
+ QCOMPARE(qurls.count(), 0);
+ }
+
+ delete mimeData;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+ SPDX-FileCopyrightText: 2005 David Faure <faure@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KURLMIMEDATATEST_H
+#define KURLMIMEDATATEST_H
+
+#include <QObject>
+
+class KUrlMimeDataTest : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void testURLList();
+ void testOneURL();
+ void testFromQUrl();
+ void testMostLocalUrlList_data();
+ void testMostLocalUrlList();
+};
+
+#endif
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#include <QDebug>
+#include <QTest>
+
+#include "kcoreaddons_debug.h"
+#include "kuser.h"
+
+namespace QTest
+{
+template<>
+char *toString(const KUserId &id)
+{
+ return qstrdup(id.toString().toLocal8Bit().data());
+}
+template<>
+char *toString(const KGroupId &id)
+{
+ return qstrdup(id.toString().toLocal8Bit().data());
+}
+}
+
+class KUserTest : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void testKUser();
+ void testKUserGroup();
+ void testKUserId();
+ void testKGroupId();
+};
+
+static inline void printUserInfo(KUser user)
+{
+ qCDebug(KCOREADDONS_DEBUG) << "Login name:" << user.loginName();
+ qCDebug(KCOREADDONS_DEBUG) << "Full name:" << user.property(KUser::FullName);
+ qCDebug(KCOREADDONS_DEBUG) << "User ID:" << user.userId().toString();
+ qCDebug(KCOREADDONS_DEBUG) << "Group ID:" << user.groupId().toString();
+ qCDebug(KCOREADDONS_DEBUG) << "Home dir:" << user.homeDir();
+ qCDebug(KCOREADDONS_DEBUG) << "Superuser:" << user.isSuperUser();
+ qCDebug(KCOREADDONS_DEBUG) << "Shell: " << user.shell();
+ qCDebug(KCOREADDONS_DEBUG) << "Face icon path:" << user.faceIconPath();
+ qCDebug(KCOREADDONS_DEBUG) << "Groups:" << user.groupNames();
+ qCDebug(KCOREADDONS_DEBUG);
+}
+
+void KUserTest::testKUser()
+{
+ KUser user(KUser::UseRealUserID);
+ KUser effectiveUser(KUser::UseRealUserID);
+ QVERIFY(user.isValid());
+ QVERIFY(effectiveUser.isValid());
+ QCOMPARE(user, effectiveUser); // should be the same, no suid
+ QVERIFY(user.groupId().isValid());
+ QCOMPARE(user.groupId(), KGroupId::currentGroupId());
+ QVERIFY(!user.groups().isEmpty()); // user must be in at least one group
+ QVERIFY(!user.groupNames().isEmpty()); // user must be in at least one group
+ QCOMPARE(user.groups().size(), user.groupNames().size());
+
+ QStringList allUserNames = KUser::allUserNames();
+ QList<KUser> allUsers = KUser::allUsers();
+ QVERIFY(!allUserNames.isEmpty());
+ QVERIFY(!allUsers.isEmpty());
+ QCOMPARE(allUsers.size(), allUserNames.size());
+ // check that the limiting works
+ QCOMPARE(user.groups(1).size(), 1);
+ QCOMPARE(user.groupNames(1).size(), 1);
+ qCDebug(KCOREADDONS_DEBUG) << "All users: " << allUserNames;
+ // check that the limiting works
+ QCOMPARE(KUser::allUserNames(1).size(), 1);
+ QCOMPARE(KUser::allUsers(1).size(), 1);
+ // We can't test the KUser properties, since they differ on each system
+ // instead just print them all out, this can be verified by the person running the test
+ printUserInfo(user);
+#if 0 // enable this if you think that KUser might not be working correctly
+ Q_FOREACH (const KUser &u, allUsers) {
+ printUserInfo(u);
+ }
+#endif
+
+ // test operator==
+ KUser invalidKUser = KUser(KUserId());
+ QVERIFY(invalidKUser != invalidKUser); // invalid never equal
+ QVERIFY(invalidKUser != user);
+ QVERIFY(user != invalidKUser); // now test the other way around
+ QCOMPARE(user, user);
+
+ // make sure we don't crash when accessing properties of an invalid instance
+ QCOMPARE(invalidKUser.faceIconPath(), QString());
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 0)
+ QCOMPARE(invalidKUser.fullName(), QString());
+#endif
+ QCOMPARE(invalidKUser.groupId(), KGroupId());
+ invalidKUser.groupNames(); // could be empty, or "nogroup", so no checks here
+ invalidKUser.groups(); // same as above
+ QCOMPARE(invalidKUser.homeDir(), QString());
+ QCOMPARE(invalidKUser.isSuperUser(), false);
+ QCOMPARE(invalidKUser.loginName(), QString());
+ QCOMPARE(invalidKUser.shell(), QString());
+ QCOMPARE(invalidKUser.userId(), KUserId());
+ QCOMPARE(invalidKUser.userId(), KUserId());
+ QCOMPARE(invalidKUser.property(KUser::RoomNumber), QVariant());
+}
+
+void KUserTest::testKUserGroup()
+{
+ KUserGroup group(KUser::UseRealUserID);
+ KUserGroup effectiveUser(KUser::UseEffectiveUID);
+ QVERIFY(group.isValid());
+ QVERIFY(effectiveUser.isValid());
+ QCOMPARE(group, effectiveUser); // should be the same, no suid
+#ifdef Q_OS_WIN
+ // on Windows the special group "None" has no members (often the only group that exists)
+ if (group.name() != QLatin1String("None")) {
+#else
+ {
+#endif
+ QStringList groupUserNames = group.userNames();
+ QList<KUser> groupUsers = group.users();
+ QVERIFY(!groupUsers.isEmpty()); // group must have at least one user (the current user)
+ QVERIFY(!groupUserNames.isEmpty()); // group must have at least one user (the current user)
+ QCOMPARE(groupUsers.size(), groupUserNames.size());
+ // check that the limiting works
+ QCOMPARE(group.users(1).size(), 1);
+ QCOMPARE(group.userNames(1).size(), 1);
+ }
+
+ QStringList allGroupNames = KUserGroup::allGroupNames();
+ QList<KUserGroup> allGroups = KUserGroup::allGroups();
+ QVERIFY(!allGroupNames.isEmpty());
+ QVERIFY(!allGroups.isEmpty());
+ QCOMPARE(allGroups.size(), allGroupNames.size());
+ qCDebug(KCOREADDONS_DEBUG) << "All groups: " << allGroupNames;
+ // check that the limiting works
+ QCOMPARE(KUserGroup::allGroupNames(1).size(), 1);
+ QCOMPARE(KUserGroup::allGroups(1).size(), 1);
+ // We can't test the KUser properties, since they differ on each system
+ // instead just print them all out, this can be verified by the person running the test
+ qCDebug(KCOREADDONS_DEBUG).nospace() << "Current group: " << group.name() << ", group ID =" << group.groupId().toString()
+ << ", members = " << group.userNames();
+#if 0 // enable this if you think that KUser might not be working correctly
+ for (int i = 0; i < allGroups.size(); ++i) {
+ qDebug().nospace() << "Group " << i << ": name = " << allGroups[i].name()
+ << ", group ID =" << allGroups[i].groupId().toString();
+ qDebug() << allGroups[i].name() << "members:" << allGroups[i].userNames();
+ }
+#endif
+ // test operator==
+ KUserGroup invalidKUserGroup = KUserGroup(KGroupId());
+ QVERIFY(invalidKUserGroup != invalidKUserGroup); // invalid never equal
+ QVERIFY(invalidKUserGroup != group);
+ QVERIFY(group != invalidKUserGroup); // now test the other way around
+ QCOMPARE(group, group);
+
+ // make sure we don't crash when accessing an invalid KUserGroup
+ QCOMPARE(invalidKUserGroup.groupId(), KGroupId());
+ invalidKUserGroup.name(); // could be empty, or "nogroup", so no checks here
+ QCOMPARE(invalidKUserGroup.userNames(), QStringList());
+ QCOMPARE(invalidKUserGroup.users(), QList<KUser>());
+}
+
+void KUserTest::testKUserId()
+{
+ // make sure KUser::currentUserId() and KUser::curretEffectiveUserId() work
+ KUserId currentUser = KUserId::currentUserId();
+ QVERIFY(currentUser.isValid());
+ KUserId currentEffectiveUser = KUserId::currentEffectiveUserId();
+ QVERIFY(currentEffectiveUser.isValid());
+ // these should be the same since this is not a setuid program
+ QCOMPARE(currentUser, currentEffectiveUser);
+
+ KUser kuser(currentUser);
+ // now get the same user from his name
+ QString userName = kuser.loginName();
+ qDebug("Current user: %s, id: %s", qPrintable(userName), qPrintable(currentUser.toString()));
+ QVERIFY(!userName.isEmpty());
+ KUserId currentUserFromStr = KUserId::fromName(userName);
+ QVERIFY(currentUserFromStr.isValid());
+ KUserId currentUserCopyFromKUser = kuser.userId();
+ QVERIFY(currentUserCopyFromKUser.isValid());
+ KUserId invalid;
+ QVERIFY(!invalid.isValid());
+#ifdef Q_OS_WIN
+ KUserId invalid2(nullptr);
+#else
+ KUserId invalid2(-1);
+#endif
+ QVERIFY(!invalid2.isValid());
+ // I guess it is safe to assume no user with this name exists
+ KUserId invalid3 = KUserId::fromName(QStringLiteral("This_user_does_not_exist"));
+ QVERIFY(!invalid3.isValid());
+
+ // check comparison
+ QCOMPARE(invalid, KUserId());
+ QCOMPARE(invalid, invalid2);
+ QCOMPARE(invalid, invalid3);
+ QCOMPARE(currentUser, currentUserFromStr);
+ QCOMPARE(currentUser, currentEffectiveUser);
+ QCOMPARE(currentUser, currentUserCopyFromKUser);
+ QVERIFY(currentUser != invalid);
+ QVERIFY(currentUser != invalid2);
+ QVERIFY(currentUser != invalid3);
+ QVERIFY(invalid != currentUser);
+ // Copy constructor and assignment
+ KUserId currentUserCopy = currentUser;
+ QCOMPARE(currentUser, currentUserCopy);
+ QCOMPARE(currentUser, KUserId(currentUser));
+ QCOMPARE(currentEffectiveUser, KUserId(currentUser));
+}
+
+void KUserTest::testKGroupId()
+{
+ // make sure KGroup::currentGroupId() and KGroup::curretEffectiveGroupId() work
+ KGroupId currentGroup = KGroupId::currentGroupId();
+ QVERIFY(currentGroup.isValid());
+ KGroupId currentEffectiveGroup = KGroupId::currentEffectiveGroupId();
+ QVERIFY(currentEffectiveGroup.isValid());
+ // these should be the same since this is not a setuid program
+ QCOMPARE(currentGroup, currentEffectiveGroup);
+
+ // now get the same Group from his name
+ KUserGroup kuserGroup(currentGroup);
+ QString groupName = kuserGroup.name();
+ qDebug("Current group: %s, id: %s", qPrintable(groupName), qPrintable(currentGroup.toString()));
+ QVERIFY(!groupName.isEmpty());
+ KGroupId currentGroupFromStr = KGroupId::fromName(groupName);
+ QVERIFY(currentGroupFromStr.isValid());
+ KGroupId currentGroupCopyFromKUserGroup = kuserGroup.groupId();
+ QVERIFY(currentGroupCopyFromKUserGroup.isValid());
+ KGroupId invalid;
+ QVERIFY(!invalid.isValid());
+#ifdef Q_OS_WIN
+ KGroupId invalid2(nullptr);
+#else
+ KGroupId invalid2(-1);
+#endif
+ QVERIFY(!invalid2.isValid());
+ // I guess it is safe to assume no Group with this name exists
+ KGroupId invalid3 = KGroupId::fromName(QStringLiteral("This_Group_does_not_exist"));
+ QVERIFY(!invalid3.isValid());
+
+ // check comparison
+ QCOMPARE(invalid, KGroupId());
+ QCOMPARE(invalid, invalid2);
+ QCOMPARE(invalid, invalid3);
+ QCOMPARE(currentGroup, currentGroupFromStr);
+ QCOMPARE(currentGroup, currentEffectiveGroup);
+ QCOMPARE(currentGroup, currentGroupCopyFromKUserGroup);
+ QVERIFY(invalid != currentGroup);
+ QVERIFY(currentGroup != invalid);
+ QVERIFY(currentGroup != invalid2);
+ QVERIFY(currentGroup != invalid3);
+ // Copy constructor and assignment
+ KGroupId currentGroupCopy = currentGroup;
+ QCOMPARE(currentGroup, currentGroupCopy);
+ QCOMPARE(currentGroup, KGroupId(currentGroup));
+ QCOMPARE(currentEffectiveGroup, KGroupId(currentGroup));
+}
+
+QTEST_MAIN(KUserTest)
+
+#include "kusertest.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Merry <alexmerry@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#include "multiplugin.h"
+#include "kcoreaddons_debug.h"
+#include <QDebug>
+#include <kexportplugin.h>
+#include <kpluginfactory.h>
+
+MultiPlugin1::MultiPlugin1(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ qCDebug(KCOREADDONS_DEBUG) << "MultiPlugin1" << args;
+ setObjectName(QLatin1String("MultiPlugin1"));
+}
+
+MultiPlugin2::MultiPlugin2(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ qCDebug(KCOREADDONS_DEBUG) << "MultiPlugin2" << args;
+ setObjectName(QLatin1String("MultiPlugin2"));
+}
+
+K_PLUGIN_FACTORY(MultiPluginFactory,
+ registerPlugin<MultiPlugin1>();
+ registerPlugin<MultiPlugin2>(QLatin1String("secondary")); // keyword
+)
+
+#include "multiplugin.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Merry <alexmerry@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#ifndef MULTIPLUGIN_H
+#define MULTIPLUGIN_H
+
+#include <QObject>
+
+class MultiPlugin1 : public QObject
+{
+ Q_OBJECT
+
+public:
+ MultiPlugin1(QObject *parent, const QVariantList &args);
+};
+
+class MultiPlugin2 : public QObject
+{
+ Q_OBJECT
+
+public:
+ MultiPlugin2(QObject *parent, const QVariantList &args);
+};
+
+#endif // MULTIPLUGIN_H
--- /dev/null
+#!/usr/bin/env python
+#-*- coding: utf-8 -*-
+
+from __future__ import print_function
+
+import sys
+
+sys.path.append(sys.argv[1])
+
+from PyQt5 import QtCore
+from PyQt5 import QtWidgets
+
+from PyKF5 import KCoreAddons
+
+def main():
+ app = QtWidgets.QApplication(sys.argv)
+
+ assert(KCoreAddons.KStringHandler.capwords("the quick brown fox jumped over the lazy dog") == "The Quick Brown Fox Jumped Over The Lazy Dog")
+
+if __name__ == '__main__':
+ sys.exit(main())
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Merry <alexmerry@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#include "unversionedplugin.h"
+#include "kcoreaddons_debug.h"
+#include <QDebug>
+#include <kexportplugin.h>
+#include <kpluginfactory.h>
+
+UnversionedPlugin::UnversionedPlugin(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ qCDebug(KCOREADDONS_DEBUG) << "Created UnversionedPlugin with args" << args;
+}
+
+K_PLUGIN_FACTORY(UnversionedPluginFactory, registerPlugin<UnversionedPlugin>();)
+
+#include "unversionedplugin.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Merry <alexmerry@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#ifndef UNVERSIONEDPLUGIN_H
+#define UNVERSIONEDPLUGIN_H
+
+#include <QObject>
+
+class UnversionedPlugin : public QObject
+{
+ Q_OBJECT
+
+public:
+ UnversionedPlugin(QObject *parent, const QVariantList &args);
+};
+
+#endif // UNVERSIONEDPLUGIN_H
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Merry <alexmerry@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#include "versionedplugin.h"
+#include "kcoreaddons_debug.h"
+#include <QDebug>
+#include <kexportplugin.h>
+#include <kpluginfactory.h>
+
+VersionedPlugin::VersionedPlugin(QObject *parent, const QVariantList &args)
+ : QObject(parent)
+{
+ qCDebug(KCOREADDONS_DEBUG) << "Created VersionedPlugin with args" << args;
+}
+
+K_PLUGIN_FACTORY(VersionedPluginFactory, registerPlugin<VersionedPlugin>();)
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 84)
+K_EXPORT_PLUGIN_VERSION(5)
+#endif
+
+#include "versionedplugin.moc"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Merry <alexmerry@kde.org>
+
+ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+*/
+
+#ifndef VERSIONEDPLUGIN_H
+#define VERSIONEDPLUGIN_H
+
+#include <QObject>
+
+class VersionedPlugin : public QObject
+{
+ Q_OBJECT
+
+public:
+ VersionedPlugin(QObject *parent, const QVariantList &args);
+};
+
+#endif // VERSIONEDPLUGIN_H
--- /dev/null
+# - Try to find the FAM directory notification library
+# Once done this will define
+#
+# FAM_FOUND - system has FAM
+# FAM_INCLUDE_DIR - the FAM include directory
+# FAM_LIBRARIES - The libraries needed to use FAM
+
+# SPDX-FileCopyrightText: 2006 Alexander Neundorf <neundorf@kde.org>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+
+FIND_PATH(FAM_INCLUDE_DIR fam.h)
+
+FIND_LIBRARY(FAM_LIBRARIES NAMES fam )
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(FAM DEFAULT_MSG FAM_INCLUDE_DIR FAM_LIBRARIES )
+
+set_package_properties(FAM PROPERTIES
+ URL "http://oss.sgi.com/projects/fam"
+ DESCRIPTION "File alteration notification support via a separate service"
+)
+
+MARK_AS_ADVANCED(FAM_INCLUDE_DIR FAM_LIBRARIES)
+
--- /dev/null
+# - Try to find procstat library
+# Once done this will define
+#
+# PROCSTAT_FOUND - system has procstat
+# PROCSTAT_INCLUDE_DIR - the procstat include directory
+# PROCSTAT_LIBRARIES - The libraries needed to use procstat
+
+# SPDX-FileCopyrightText: 2019 Tobias C. Berner <tcberner@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+
+
+FIND_PATH(PROCSTAT_INCLUDE_DIR libprocstat.h)
+
+FIND_LIBRARY(PROCSTAT_LIBRARIES NAMES procstat )
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROCSTAT DEFAULT_MSG PROCSTAT_INCLUDE_DIR PROCSTAT_LIBRARIES )
+
+set_package_properties(PROCSTAT PROPERTIES
+ URL "https://github.com/freebsd/freebsd/tree/master/lib/libprocstat"
+ DESCRIPTION "Library to access process information"
+)
+
+MARK_AS_ADVANCED(PROCSTAT_INCLUDE_DIR PROCSTAT_LIBRARIES)
--- /dev/null
+#
+# SPDX-FileCopyrightText: 2016 Shaheed Haque <srhaque@theiet.org>
+# SPDX-FileCopyrightText: 2016 Stephen Kelly <steveire@gmail.com>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+import os, sys
+
+import rules_engine
+sys.path.append(os.path.dirname(os.path.dirname(rules_engine.__file__)))
+import Qt5Ruleset
+
+from clang.cindex import AccessSpecifier
+
+def discard_base(container, sip, matcher):
+ sip["base_specifiers"] = []
+
+def local_container_rules():
+ return [
+ [".*", "KUserId", ".*", ".*", ".*", discard_base],
+ [".*", "KGroupId", ".*", ".*", ".*", discard_base]
+ ]
+
+def local_forward_declaration_rules():
+ return [
+ # [".*", "QWidget", ".*", rules_engine.mark_forward_declaration_external]
+ ]
+
+def local_function_rules():
+ return [
+
+ ["KUser", "KUser", ".*", ".*", ".*passwd.*", rules_engine.function_discard],
+ ["KUserGroup", "KUserGroup", ".*", ".*", ".*group.*", rules_engine.function_discard],
+
+ ["KCrash", "defaultCrashHandler", ".*", ".*", ".*", rules_engine.function_discard],
+
+ ["KPluginFactory", "create", ".*", ".*", ".*QWidget.*", rules_engine.function_discard],
+
+ # Deprecated
+ ["KPluginFactory", "createPartObject", ".*", ".*", ".*", rules_engine.function_discard],
+
+ # Multiple overloads with same python signature
+ ["KMacroExpanderBase", "expandMacrosShellQuote", ".*", ".*", ".*int.*", rules_engine.function_discard],
+ ["KRandomSequence", "setSeed", ".*", ".*", "int.*", rules_engine.function_discard],
+
+ [".*", "qobject_cast", ".*", ".*", ".*", rules_engine.function_discard],
+ [".*", "qobject_interface_iid", ".*", ".*", ".*", rules_engine.function_discard],
+ ]
+
+def rewrite_typedef_as_unsigned_int(container, typedef, sip, matcher):
+ sip["decl"] = "unsigned int"
+
+def local_typedef_rules():
+ return [
+ ["KPluginFactory", "CreateInstanceFunction", rules_engine.typedef_discard],
+ [".*", "K_GID", rewrite_typedef_as_unsigned_int],
+ [".*", "K_UID", rewrite_typedef_as_unsigned_int],
+ ]
+
+class RuleSet(Qt5Ruleset.RuleSet):
+ def __init__(self):
+ Qt5Ruleset.RuleSet.__init__(self)
+ self._forward_declaration_db = rules_engine.ForwardDeclarationRuleDb(lambda: local_forward_declaration_rules() + Qt5Ruleset.forward_declaration_rules())
+ self._fn_db = rules_engine.FunctionRuleDb(lambda: local_function_rules() + Qt5Ruleset.function_rules())
+ self._container_db = rules_engine.ContainerRuleDb(lambda: local_container_rules() + Qt5Ruleset.container_rules())
+ self._typedef_db = rules_engine.TypedefRuleDb(lambda: local_typedef_rules() + Qt5Ruleset.typedef_rules())
--- /dev/null
+### KApiDox Project-specific Overrides File
+
+# define so that deprecated API is not skipped
+PREDEFINED += \
+ "KCOREADDONS_ENABLE_DEPRECATED_SINCE(x, y)=1" \
+ "KCOREADDONS_BUILD_DEPRECATED_SINCE(x, y)=1" \
+ "KCOREADDONS_DEPRECATED_VERSION(x, y, t)="
--- /dev/null
+maintainer: mpyne
+description: Addons to QtCore
+tier: 1
+type: functional
+platforms:
+ - name: Linux
+ - name: FreeBSD
+ - name: Windows
+ - name: macOS
+ - name: Android
+portingAid: false
+deprecated: false
+release: true
+libraries:
+ - qmake: KCoreAddons
+ cmake: "KF5::CoreAddons"
+cmakename: KF5CoreAddons
+
+public_lib: true
+group: Frameworks
+subgroup: Tier 1
--- /dev/null
+# UTF-8 test:äëïöü
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4 stable\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2006-01-12 16:33+0200\n"
+"Last-Translator: JUANITA FRANZ <JUANITA.FRANZ@VR-WEB.DE>\n"
+"Language-Team: AFRIKAANS <translate-discuss-af@lists.sourceforge.net>\n"
+"Language: af\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Geen lisensiëring terme vir hierdie program is gespesifiseer nie.\n"
+"Gaan asseblief die dokumentasie en bron kode na vir enige\n"
+"lisensiëring terme.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Hierdie program word versprei onder die terme van die %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Lisensie:"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Lisensie:"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Publiek Sleutel"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Publiek Sleutel"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Publiek Sleutel"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Pasmaak"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Geen verskaffer gekies."
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE is in baie tale beskikbaar. Besoek http://i18n.kde.org vir "
+"internasionale tale en algemene statistiek i.v.m. KDE. vertaling. Vir Suid-"
+"Afrikaanse tale kan http://kde.af.org.za en http://www.translate.org.za "
+"besoek word.</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Vertoon outeur informasie"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Vertoon lisensie informasie"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Vietnamese"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Hierdie program was geskryf deur iemand wat anoniem wil bly."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 was geskryf deur\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Gebruik asseblief http://bugs.kde.org om foute te raporteer.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Gebruik asseblief %1 .\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Die biblioteek: '%1' bevat nie die funksie '%2' nie."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "nm"
+
+#: lib/util/kformatprivate.cpp:105
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Aan"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Goed"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Verander"
+
+#: lib/util/kformatprivate.cpp:111
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Redigeer"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Stuur in"
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "Maandag"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 opsies"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 opsies"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 opsies"
+msgstr[1] "%1 opsies"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "Maandag"
+msgstr[1] "Maandag"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 opsies"
+msgstr[1] "%1 opsies"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 opsies"
+msgstr[1] "%1 opsies"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ongeldige vlaggies"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Maandag"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Maandag"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dinsdag"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 opsies"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Die styl %1 was nie gevind\n"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Safa Alfulaij <safa1996alfulaij@gmail.com>, 2014, 2017, 2018.
+# Zayed Al-Saidi <zayed.alsaidi@gmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-06-28 15:38+0300\n"
+"PO-Revision-Date: 2021-06-28 16:02+0400\n"
+"Last-Translator: Zayed Al-Saidi <zayed.alsaidi@gmail.com>\n"
+"Language-Team: ar\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Lokalize 21.07.70\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"لم تُحدّد شروط ترخيص لهذا البرنامج.\n"
+"رجاءً تحقّق من التوثيق أو أي مصدر\n"
+"لأي شروط ترخيص.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "يُوزّع هذا البرنامج تحت شروط %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "رخصة غنو العمومية إصدارة ٢"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "رخصة غنو العمومية الصغرى إصدارة ٢"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "رخصة بيإسدي"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "رخصة بيإسدي"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "رخصة فنية"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "رخصة فنية"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "رخصة كيوت العمومية"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "رخصة غنو العمومية إصدارة ٣"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "رخصة غنو العمومية الصغرى إصدارة ٣"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "رخصة غنو العمومية الصغرى إصدارة ٢٫١"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "مخصصة"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "لم تُحدّد"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>يعمل أفراد طاقم عربآيز على ترجمة واجهة كدي إلى اللغة العربية، وهذا بفضل "
+"جهود مترجمين متطوّعين من كافة الدول العربية وغيرها.</p>\n"
+"<p>لمزيد من المعلومات عن ترجمة كدي إلى العربةي، زُر <a href=\"https://www."
+"arabeyes.org\">الموقع الرسمي للفريق</a>. رجاءً أبلغ عن أخطاء الترجمة على "
+"العنوان الآتي: <a href=\"mailto:contact@arabeyes.org\">contact@arabeyes.org</"
+"a></p>\n"
+"<p>تُترجم كدي إلى لغات عديدة بفضل مختلف طواقم الترجمة من العالم بأسره.</p>\n"
+"<p>لمزيد من المعلومات زُر <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "اعرض معلومات المؤلف."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "اعرض معلومات الرخصة."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "اسم ملف الأساس لمدخلة سطح المكتب لهذا التطبيق."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "اسم الملف"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "كتب أحد الأشخاص هذا التطبيق، وهو يفضّل أن يبقى مجهولًا."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "كتب %1:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "رجاءً استخدم https://bugs.kde.org للإبلاغ عن العلل."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "رجاءً أبلغ عن العلل إلى %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "المكتبة %1 لا تُوفّر KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "يكـ"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "زبـ"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "آ"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "فـ"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "بـ"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "نـ"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "مكـ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "مـ"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "كـ"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "كيبي"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "ميجا"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "مبي"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "غيغا"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "غيب"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "تيرا "
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "تيبي"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "بيتا"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "بيبي"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "إكسا"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "اكسبي"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "زيتا"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "زيبي"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "يوتا"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "يوبي"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "بت"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "بايت"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "م"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "هز"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 ك.بايت"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 م.ب"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 غ.بايت"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ت.بايت"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ب.بايت"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 إ.بايت"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ز.بايت"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ي.بايت"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 ك.بايت"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 م.ب"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 غ.بايت"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ت.بايت"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ب.بايت"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 إ.بايت"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ز.بايت"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ي.بايت"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 ك.بايت"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 م.بايت"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 غ.بايت"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ت.بايت"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ب.بايت"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 إ.بايت"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ز.بايت"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ي.بايت"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1دق%2.%3ث"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1دق%2ث"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1سا%2دق"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1سا%2دق%3.%4ث"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1سا%2دق%3ث"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 يوم"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ساعة"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 دقيقة"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 ثانية"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "أقل من مليثانية"
+msgstr[1] "مليثانية واحدة"
+msgstr[2] "مليثانيتين"
+msgstr[3] "%n مليثوان"
+msgstr[4] "%n مليثانية"
+msgstr[5] "%n مليثانية"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "أقلّ من يوم"
+msgstr[1] "يوم واحد"
+msgstr[2] "يومان"
+msgstr[3] "%n أيام"
+msgstr[4] "%n يومًا"
+msgstr[5] "%n يوم"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "أقل من ساعة"
+msgstr[1] "ساعة واحدة"
+msgstr[2] "ساعتان"
+msgstr[3] "%n ساعات"
+msgstr[4] "%n ساعة"
+msgstr[5] "%n ساعة"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "أقل من دقيقة"
+msgstr[1] "دقيقة واحدة"
+msgstr[2] "دقيقتان"
+msgstr[3] "%n دقائق"
+msgstr[4] "%n دقيقة"
+msgstr[5] "%n دقيقة"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "أقل من ثانية"
+msgstr[1] "ثانية واحدة"
+msgstr[2] "ثانيتان"
+msgstr[3] "%n ثوان"
+msgstr[4] "%n ثانية"
+msgstr[5] "%n ثانية"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 و%2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "تاريخ غير صالح"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "في يومين"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "الغد"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "اليوم"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "الغد"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "قبل يومين"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "الآن"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "قبل %1 دقيقة"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1، %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "المسار %1 غير موجود"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "فشل في تنفيذ `lsof' ترميز الخطأ %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob غير مدعومة على نظام ويندوز"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Zayed Al-Saidi <zayed.alsaidi@gmail.com>, 2009, 2021.
+# Abdalrahim Fakhouri <abdilra7eem@yahoo.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-06-11 00:06+0400\n"
+"Last-Translator: Zayed Al-Saidi <zayed.alsaidi@gmail.com>\n"
+"Language-Team: ar\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+"X-Generator: Lokalize 19.12.3\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "صوت CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "خط SNF bitmap"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "بريمج جافا"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "مكيف الامتدادات KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "مخطط ألوان كدي"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "حزمة KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "حافظة KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "قالب تقرير Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "بلازمود"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "سمة SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "وثيقة إدارة مشاريع Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "وثيقة حزمة عمل Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "وثيقة إدارة مشاريع KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "حزمة عمل إدارة مشاريع KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "أرشيف Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "أرشيف ويب"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "مخطط W3C XML"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "ملف ملحق RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "استيراد KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "صورة HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "تنسيقات صورة خامة لكدي"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "ملف كائن سداسي عشر Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "قائمة ملحقات محملات قائمة ملفات لكيت"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "ملف كراسة موسيقية abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "حزمة خطوط"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "خادم ويندوز"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "مجموعة عمل ويندوز"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "نظام مراقبة كدي"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "سمة كدي"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "مشروع Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "ملف Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "بطاطا"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "لعبة Kolf محفوظة"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "دورة Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "أرشيف مستند أوكلار"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "صورة Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "صورة Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "صورة KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "صورة Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "وثيقة KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "وثيقة مدرب المفردات"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "ملف KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "مفردات KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "تشكيلة تفريغ Cachegrind/Callgrind "
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "ملف Umbrello UML Modeller "
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "وصلة ويندوز"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "قائمة تنزيل KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "أرشف إبتسامات Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "جهة اتصال ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "تنسيق وسائط مايكروسوفت"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "وثيقة Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "صورة PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "ملف لغة الوصف Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "خيارات ضبط KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "خيارات توليد رمز KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "تعريف عناصر واجهة KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "تعريف KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "تقرير KCrash "
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Amitakhya Phukan <aphukan@fedoraproject.org>, 2008.
+# Amitakhya Phukan <অমিতাক্ষ ফুকন>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4_as\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-12-26 15:19+0530\n"
+"Last-Translator: Amitakhya Phukan <অমিতাক্ষ ফুকন>\n"
+"Language-Team: Assamese <fedora-trans-as@redhat.com>\n"
+"Language: as\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 0.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"এই প্ৰোগ্ৰামৰ বাবে কোনো প্ৰমাণপত্ৰ নিৰ্ধাৰণ কৰা নহয় ।\n"
+"অনুগ্ৰহ কৰি, প্ৰমাণপত্ৰ সংক্ৰান্ত কোনো তথ্যৰ বাবে প্ৰোগ্ৰামৰ সৈতে প্ৰাপ্ত নথিপত্ৰ বা মূল "
+"উৎস পৰীক্ষা কৰক ।\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "%1 ৰ শৰ্তাধীন এই প্ৰোগ্ৰাম বিতৰণ কৰা হৈছে ।"
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "শিল্পকাৰ্য্য সংক্ৰান্ত প্ৰমাণপত্ৰ"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "শিল্পকাৰ্য্য সংক্ৰান্ত প্ৰমাণপত্ৰ"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "স্বনিৰ্ধাৰিত"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "উল্লেখিত নহয়"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>বিশ্বব্যাপী বিভিন্ন অনুবাদক দলৰ অৱিৰত প্ৰয়াসত বিশ্বৰ বিভিন্ন ভাষাত KDE অনুবাদ কৰা "
+"হৈছে ।</p><p>KDE ৰ আন্তৰ্জাতীয়কৰণৰ সম্বন্ধে অধিক জনাৰ বাবে <a href=\"http://l10n."
+"kde.org\">http://l10n.kde.org</a></p> চাওক ।"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "লেখকৰ তথ্য প্ৰদৰ্শন কৰা হ'ব"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "প্ৰমাণপত্ৰ সংক্ৰান্ত তথ্য প্ৰদৰ্শন কৰা হয়"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "এই অনুপ্ৰয়োগৰ নিৰ্মাতা অজ্ঞাত থাকিব ইচ্ছুক ।"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 লিখা হৈছে\n"
+"%2 ৰ দ্বাৰা"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "অনুগ্ৰহ কৰি http://bugs.kde.org ত বাগ প্ৰতিবেদন কৰক ।\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "অনুগ্ৰহ কৰি %1 লৈ বাগ প্ৰতিবেদন কৰক ।\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 লাইব্ৰেৰি দ্বাৰা, KDE 4 ৰ সৈতে সুসংগত কলঘৰ উপলব্ধ কৰা নহয় ।"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "May"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "সম্পাদনা"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "জমা কৰক"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 days"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hours"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutes"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 seconds"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milliseconds"
+msgstr[1] "%1 milliseconds"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 days"
+msgstr[1] "%1 days"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 hours"
+msgstr[1] "%1 hours"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minutes"
+msgstr[1] "%1 minutes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 seconds"
+msgstr[1] "%1 seconds"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 আৰু %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "অবৈধ পঞ্জিকাৰ ধৰণ"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 days"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "আজি"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "যোৱা কালি"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minutes"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "নথিপত্ৰ %1 পোৱা নাযায়"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# enolp <enolp@softastur.org>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2020-11-19 21:02+0100\n"
+"Last-Translator: enolp <enolp@softastur.org>\n"
+"Language-Team: Asturian <alministradores@softastur.org>\n"
+"Language: ast\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Qt-Contexts: true\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 20.11.80\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nun s'especificó nengún términu de llicencia pa esti\n"
+"programa. Comprueba la documentación de la fonte pa\n"
+"cualesquier términu de llicencia, por favor.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Esti programa distribúise so los términos de la %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Llicencia pública y xeneral de GNU versión 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Llicencia pública, xeneral y amenorgada de GNU versión 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Llicencia BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Llicencia BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Llicencia artística"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Llicencia artística"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Llicencia pública Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Llicencia pública y xeneral de GNU versión 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Llicencia pública, xeneral y amenorgada de GNU versión 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Llicencia pública, xeneral y amenorgada de GNU versión 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Llicencia personalizada"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nun s'especificó"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE traduzse a munches llingües gracies al trabayu de los equipos "
+"mundiales de traducción.</p><p>Pa más información tocante a la "
+"internacionalización de KDE, visita <a href=\"https://l10n.kde.org\">https://"
+"l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Amuesa la información de l'autoría."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Amuesa la información de la llicencia."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"El nome del ficheru base de la entrada d'escritoriu pa esta aplicación."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nome_de_ficheru"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Esta aplicación programóla daquién que quier tar nel anonimatu."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 programólu:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Usa https://bugs.kde.org pa informar de fallos, por favor."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Informa de fallos a %1, por favor."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La biblioteca %1 nun ufre un KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 díes"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hores"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutos"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segundos"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisegundu"
+msgstr[1] "%n milisegundos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n día"
+msgstr[1] "%n díes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n hores"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minutu"
+msgstr[1] "%n minutos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segundu"
+msgstr[1] "%n segundos"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 y %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data non válida"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "En dos díes"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Mañana"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Güei"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ayeri"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Hai dos díes"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Puramente agora"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "Hai %1 minutos"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "El camín %1 nun esiste"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Fallu al executar «lsof». Códigu de fallu %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob nun se sofita en Windows"
--- /dev/null
+# Xəyyam <xxmn77@gmail.com>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2020-11-18 01:05+0400\n"
+"Last-Translator: Kheyyam Gojayev <xxmn77@gmail.com>\n"
+"Language-Team: Azerbaijani <kde-i18n-doc@kde.org>\n"
+"Language: az\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Qt-Contexts: true\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 20.08.3\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Bu proqram üçün lisenziya şərtləri göstərilməyib.\n"
+"Zəhmət olmasa sənədləşməni və ya lisenziya şərtləri\n"
+"üçün mənbəni yoxlayın.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Bu proqram %1 şərtləri ilə paylanmışdır"
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Versiya 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Versiya 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Lisenziyası"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Lisenziyası"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Versiya 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Versiya 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Versiya 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Fərdi"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Göstərilməyib"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE bütün ölkələrin tərcümə komandalarının fəaliyyəti sayəsində bir çox "
+"dillərə tərcümə olunmuşdur</p><p>Siz də KDE-nin öz dilinizə tərcüməsində "
+"iştirak etmək istəsəniz <a href=\"https://l10n.kde.org\"> https://l10n.kde."
+"org</a></p> keçidinə daxil olun."
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Müəllif haqqında məlumatları göstər"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Lisenziya məlumatlarını göstər"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Bu tətbiq üçün .desktop faylının adı"
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "faylın adı"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Tətbiqin adının açıqlanmasını istəməyən müəllif tərəfindən yaradılıb."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 -in müəllifi"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Xətaları bildirmək üçün https://bugs.kde.org keçidindən istifadə edin"
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Xətaları bildirmək üçün %1 istifadə edin"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+"%1 kitabxananın KPluginFactory. tərkib hissələrin yaradılması üçün hər hansı "
+"bir təklifi yoxdur."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "i"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2 %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB "
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1d%2.%3san"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1d%2san"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1s%2d"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1s%2d%3.%4san"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1s%2d%3san"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 gün"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 saat"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 dəqiqə"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 saniyə"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisaniyələr(lər)"
+msgstr[1] "%n millisaniyə(lər)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n gün(lər)"
+msgstr[1] "%n gün(lər)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n saat(lar)"
+msgstr[1] "%n saat(lar)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n dəqiqə(lər)"
+msgstr[1] "%n dəqiqə(lər)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n saniyə(lər)"
+msgstr[1] "%n saniyə(lər)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 və %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Səhv tarix"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "İki gün ərzində"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Sabah"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Bugün"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dünən"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "İki gün öncə"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Elə indi"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 dəqiqə əvvəl"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Yol %1 mövcud deyil"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "`lsof' icra etmək mümkün olmadı. %1 səhv xətası"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob Windows-da dəstəklənmir"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Xəyyam Qocayev <xxmn77@gmail.com>, 2020, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-01-04 15:32+0400\n"
+"Last-Translator: Kheyyam Gojayev <xxmn77@gmail.com>\n"
+"Language-Team: Azerbaijani <kde-i18n-doc@kde.org>\n"
+"Language: az\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 20.12.0\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD səsi"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF bitmap şrifti"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java applet"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML Genişləndirici Uzlaşdırıcısı"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE rəng sxemi"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff paketi"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet cüzdanı"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar hesabat nümunəsi"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba mövzusu"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan layihəsi darəetmə sənədi"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan iş paketi sənədi"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato layihəsi idarəetmə sənədi"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato idarəetmə sənədi iş paketi"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar arxivi"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "veb arxiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML sxemi"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio fayl genişləmnməsi"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum fotoalbom arxivi"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR şəkili"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE raw şəkil formatı"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® HEX faylı"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate fayllar siyahısı yükləyici qoşması"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc not yazısı"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "şrift paketi"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows serveri"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows iş qrupu"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE sistem izləyicisi"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE mövzusu"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta layihəsi"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander faylı"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "kartof oğlan"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf saxlanılan oyunu"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf meydançası"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular sənəd arxivi"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri fiquru"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo fiquru"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo fiquru"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig fiquru"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg sənədi"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "söz ehtiyatını artırmaq"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot faylı"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz lüğəti"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind profil məlumatı"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML Modeller faylı"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows yarlığı"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet yükləmə siyahısı"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete ifadələr arxivi"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ kontakt"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF sənədi"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC şəkili"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt Markup dil faylı"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT konfiqurasiya seçimləri"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT kod yaratma seçimləri"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI UI Deklarasiyası"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification Deklarasiyası"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash Hesabatı"
--- /dev/null
+# translation of kcoreaddons5.po to Belarusian
+#
+# Eugene Zelenko <greendeath@mail.ru>, 2002-2004.
+# Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2006.
+# Komяpa <symbol@me.by>, 2007.
+# Komяpa <komzpa@gmail.com>, 2007.
+# Darafei Praliaskoski <komzpa@gmail.com>, 2007.
+# Siarhei Liantsevich <serzh.by@gmail.com>, 2008.
+# kom <me@komzpa.net>, 2008.
+# Darafei Praliaskouski <komzpa@gmail.com>, 2008-2021.
+# Alaksandr Suša <isushik94@gmail.com>, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-05-08 19:57+0200\n"
+"Last-Translator: Alaksandr Suša <isushik94@gmail.com>\n"
+"Language-Team: Belarusian\n"
+"Language: be\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Gtranslator 40.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Для гэтай праграмы не былі вызначаныя ліцэнзійныя ўмовы.\n"
+"Калі ласка, праглядзіце дакументацыю ці крынічны код праграмы на прадмет\n"
+"ліцэнзійных умоваў.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Гэтая праграма распаўсюджваецца на ўмовах %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License версія 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License версія 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Ліцэнзія BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Ліцэнзія BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Ліцэнзія Artistic"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Ліцэнзія Artistic"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License версія 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License версія 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License версія 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Асаблівая"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Не вызначана"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE перакладзенае на шмат моваў свету дзякуючы працы вольных "
+"перакладчыкаў.</p><p>Каб атрымаць падрабязную інфармацыю аб перакладзе KDE, "
+"наведайце <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a>.</"
+"p><p>Пераклад можа утрымліваць <b>памылкі</b>. Калі вы знайшлі памылку "
+"пераклада, калі ласка апавясціце нас аб гэтым, адправіўшы паведамленне на <a "
+"href=\\\"mailto:\\\"></a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Паказаць звесткі пра стваральніка."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Паказаць звесткі пра ліцэнзію."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Аснова назвы файла элемента працоўнага стала для гэтай праграммы"
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "назва файла"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Гэтая праграма створаная чалавекам, які захацеў застацца невядомым."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 быў напісаны:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Калі ласка, выкарыстайце http://bugs.kde.org каб паведаміць пра памылкі."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Калі ласка, каб паведаміць пра памылкі выкарыстайце %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Бібліятэка %1 не прапаноўвае KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "ё"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "з"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "а"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "ф"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "п"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "н"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "мк"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "м"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "к"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Кі"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "М"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Мі"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "Г"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Гі"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "Т"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ті"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "П"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Пі"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "Э"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Эі"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "З"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Зі"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Ё"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Ёі"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "біт"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "Б"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "м"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Гц"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 кБ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЭБ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЁБ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 КБ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЭБ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЁБ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Ю"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КіБ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МіБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГіБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ПiБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ЭiБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ЗiБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ЁiБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1х%2,%3с"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1х%2с"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1г%2х"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1г%2х%3,%4с"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1г%2х%3с"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дзён"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 гадзін"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 хвілін"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 сенунд"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n мілісекунда"
+msgstr[1] "%n мілісекунды"
+msgstr[2] "%n мілісекунд"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n дзень"
+msgstr[1] "%n дні"
+msgstr[2] "%n дзён"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n гадзіна"
+msgstr[1] "%n гадзіны"
+msgstr[2] "%n гадзін"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n хвіліна"
+msgstr[1] "%n хвіліны"
+msgstr[2] "%n хвілін"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n сенунда"
+msgstr[1] "%n сенунды"
+msgstr[2] "%n сенунд"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 і %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Несапраўдная дата"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Цягам двух дзён"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Заўтра"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Сёння"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Учора"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Два дні таму"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Зараз"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 хвілін таму"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Шлях не існуе: %1"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Не атрымался выканаць `lsof'. Код памылкі %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob не падтрымліваецца ў Windows"
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Alaksandr Suša <isushik94@gmail.com>, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-05-08 19:07+0200\n"
+"Last-Translator: Alaksandr Suša <isushik94@gmail.com>\n"
+"Language-Team: Belarusian\n"
+"Language: be\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Gtranslator 40.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Аўдыё CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Растравы шрыфт SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Аплет Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Адаптэр расшырэння KHTM"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Каляровая схема KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Пакет KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Кашалёк KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Шаблон справаздачы Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "плазмоід"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Тэма SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Дакумент кіравання праектам у Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Дакумент, які змяшчае пачак прац Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Дакумент кіравання праектам у KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Пачак прац кіравання праектамі KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Архіў Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "вэб-архіў"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Схема XML W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Файл убудовы RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Імпарт KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR-выява"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Неапрацаваныя фарматы выяваў у KD"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Шаснаццатковы файл аб'екта Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Спіс убудоў загрузчыка файлаў Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "файл нот abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "пачак шрыфтоў"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Сервер Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Рабочая група Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Сістэмны манітор KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Тэма KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Праект Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Файл Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "бульба"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Захаваная гульня Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Поле для гольфа Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Архіў дакументаў Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Фігура Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Фігура Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Фігура KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Фігура Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Дакумент KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "дакумент для лексічнай практыкі"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Файл KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Слоўнік KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Дамп профілю Cachegrind / Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Файл Umbrello UML Modeller"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Спасылка Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Спіс загрузак KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Архіў смайлікаў Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Кантакт ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Фармат Microsoft Media"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Дакумент Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Выява Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Файл мовы разметкі Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Налады KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Налады для стварэння кода KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Дэкларацыя карыстацкага інтэрфейсу KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Дэкларацыя KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Справаздача KCrash"
--- /dev/null
+# translation of kdelibs4.po to Belarusian Latin
+# Copyright (C) 2008 This_file_is_part_of_KDE
+# This file is distributed under the same license as the kdelibs4 package.
+#
+# Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-08-30 01:10+0300\n"
+"Last-Translator: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>\n"
+"Language-Team: Belarusian Latin <i18n@mova.org>\n"
+"Language: be@latin\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Dla hetaj prahramy nie było akreślenaje licenzijnaje\n"
+"pahadnieńnie. Pašukaj jaho ŭ dakumentacyi dla prahramy\n"
+"ci ŭ jejnym vytočnym kodzie.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Hetuju prahramu raspaŭsiudžvajuć pavodle ŭmovaŭ „%1”."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Ułasnaja"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nie akreślenaja"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Supołki pierakładčykaŭ z usiaho śvietu pierakładajuć KDE na roznyja movy."
+"</p><p>Padrabiaźniej pra pierakład KDE možna daviedacca na placoŭcy: <a href="
+"\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Pakažy źviestki pra aŭtara"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Pakažy źviestki pra licenziju"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Hetaja aplikacyja napisanaja kimści, chto choča zastacca nieviadomym."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 napisali\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Kali łaska, paviedamlaj pra chiby praz placoŭku: http://bugs.kde.org.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Kali łaska, paviedamlaj pra chiby praz placoŭku: %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblijateka „%1” nia maje fabryki, jakaja b adpaviadała KDE 4."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Tra"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Źmiani"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Pierašli"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1, %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dzion"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hadzinaŭ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 chvilinaŭ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundaŭ"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisekundaŭ"
+msgstr[1] "%1 milisekundaŭ"
+msgstr[2] "%1 milisekundaŭ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dzion"
+msgstr[1] "%1 dzion"
+msgstr[2] "%1 dzion"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 hadzinaŭ"
+msgstr[1] "%1 hadzinaŭ"
+msgstr[2] "%1 hadzinaŭ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 chvilinaŭ"
+msgstr[1] "%1 chvilinaŭ"
+msgstr[2] "%1 chvilinaŭ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekundaŭ"
+msgstr[1] "%1 sekundaŭ"
+msgstr[2] "%1 sekundaŭ"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Niapravilny kalandar"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 dzion"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Siońnia"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Učora"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 chvilinaŭ"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Fajła „%1” nie isnuje."
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Zlatko Popov <zlatkopopov@fsa-bg.org>, 2006, 2007, 2008, 2009.
+# Yasen Pramatarov <yasen@lindeas.com>, 2009, 2010, 2011, 2012, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2013-07-23 01:52+0300\n"
+"Last-Translator: Yasen Pramatarov <yasen@lindeas.com>\n"
+"Language-Team: Bulgarian <dict@ludost.net>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Не е открит лиценз за тази програма. Моля, проверете\n"
+"документацията и за повече подробности.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Тази програма се разпространява под условията на %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Лиценз BSD"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Лиценз BSD"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Потребителски"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Не е посочен"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Благодарение на доброволния труд на преводачи от цял свят графичната "
+"среда KDE е преведена на много езици, включително и на български. За повече "
+"информация посетете <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></"
+"p><p>Проектът за превод на KDE на български език изпитва недостиг на опитни "
+"преводачи. <a href=\"http://kde.fsa-bg.org\">Търсят се доброволци</a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Показване на информация за автора"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Показване на информация за лиценза"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Авторът на програмата иска да остане анонимен."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 е написана от\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Ако искате да съобщите за грешка, посетете http://bugs.kde.org.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Моля, съобщавайте за грешки на %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Библиотеката %1 не е съвместима с KDE 4."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "п.о."
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "с.о."
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "п.о."
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Поща"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тайландски"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Редактиране"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Изпращане"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "п.о."
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дни"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 часа"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минути"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунди"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 милисекунда"
+msgstr[1] "%1 милисекунда"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 дни"
+msgstr[1] "%1 дни"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 часа"
+msgstr[1] "%1 часа"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 минути"
+msgstr[1] "%1 минути"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 секунди"
+msgstr[1] "%1 секунди"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 и %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Неправилен запис."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 дни"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Утре"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Днес"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "вчера"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 минути"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Няма такъв файл \"%1\""
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Yasen Pramatarov <yasen@lindeas.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2010-12-05 00:41+0200\n"
+"Last-Translator: Yasen Pramatarov <yasen@lindeas.com>\n"
+"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Аплет на Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Цветова схема за KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Портфейл KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Тема за SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Изображение HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Системен монитор за KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Тема за KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Проект на Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Файл на Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Запазена игра на Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Фигура за Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Фигура за KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Фигура за KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Фигура за Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Документ KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Файл на KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Речник KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Списък за изтегляне на KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Контакт в ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Формат Microsoft Media"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Документ KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# Bengali (Bangla) translation of kdelibs4.
+# Copyright (C) 2009, Free Software Foundation, Inc.
+# translation of kdelibs4.po to Bengali
+# Copyright (C) 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc.
+# Deepayan Sarkar,,, <deepayan.sarkar@gmail.com>, 2003.
+# Deepayan Sarkar <deepayan.sarkar@gmail.com>, 2003, 2004, 2005.
+# Deepayan Sarkar <deepayan.sarkar@gmail.com>, 2006, 2008, 2009..
+# Deepayan Sarkar <deepayan.sarkar@gmail.com>, 2009, 2010, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-07-16 14:27+0530\n"
+"Last-Translator: Deepayan Sarkar <deepayan.sarkar@gmail.com>\n"
+"Language-Team: American English <kde-translation@bengalinux.org>\n"
+"Language: bn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"এই প্রোগ্রামের লাইসেন্স সম্বন্ধে কোনো তথ্য পাওয়া যায়নি।\n"
+"অনুগ্রহ করে প্রোগ্রামটির ডকুমেন্টেশন এবং সোর্স খুঁজে দেখুন,\n"
+"সেখানে হয়তো কিছু পেতে পারেন।\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "এই প্রোগ্রামটি %1-এর শর্তাবলী অনুযায়ী বণ্টিত।"
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "জি-পি-এল v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "এল-জি-পি-এল v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "বি-এস-ডি লাইসেন্স"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "বি-এস-ডি লাইসেন্স"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "আর্টিস্টিক লাইসেন্স"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "আর্টিস্টিক লাইসেন্স"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "কিউ পাবলিক লাইসেন্স"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "জি-পি-এল v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "এল-জি-পি-এল v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "এল-জি-পি-এল v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "স্বনির্বাচিত"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "নির্ধারিত হয়নি"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>সারা পৃথিবী জুড়ে বিভিন্ন প্রকল্পের সুবাদে কে.ডি.ই. অনেকগুলি ভাষায় অনুবাদ করা "
+"হচ্ছে। কে.ডি.ই. বাংলায় অনুবাদ করার কাজ করছে অঙ্কুর (http://www.AnkurBangla.org/"
+"projects/kde/)।</p><p>কে.ডি.ই. অনুবাদ সম্বন্ধে আরো জানতে দেখুন http://l10n.kde."
+"org</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "লেখক সংক্রান্ত তথ্য প্রদর্শিত হোক"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "লাইসেন্স সংক্রান্ত তথ্য প্রদর্শিত হোক"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "ফিল্টার ত্রুটি"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "এই অ্যাপলিকেশন-এর লেখক অজ্ঞাতপরিচয় থাকতে চান।"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 লিখেছেন\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"কোনো বাগ (প্রোগ্রামে সমস্যা) খুঁজে পেলে তার কথা জানাতে http://bugs.kde.org ব্যবহার "
+"করুন।\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "অনুগ্রহ করে বাগ রিপোর্ট %1-এ পাঠান।\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 লাইব্রেরীটিতে কে.ডি.ই. 4-এ কার্যকরী জন্য কোন ফ্যাক্টরী নেই।"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "এ.এম."
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "পি.এম."
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "এ.এম."
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "খামিস (বৃহঃ)"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "এ.এম."
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "মে"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "পি"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "পি"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "সম্পাদনা"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "জমা দাও"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "এ.এম."
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 বাইট"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 কিলোবাইট"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 মেগাবাইট"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 গিগাবাইট"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 বাইট"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 কিলোবাইট"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 মেগাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 গিগাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 বাইট"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 কিলোবাইট"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 মেগাবাইট"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 গিগাবাইট"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 দিন"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ঘন্টা"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 মিনিট"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 সেকণ্ড"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 মিলিসেকেন্ড"
+msgstr[1] "%1 মিলিসেকেন্ড"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 দিন"
+msgstr[1] "%1 দিন"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ঘন্টা"
+msgstr[1] "%1 ঘন্টা"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 মিনিট"
+msgstr[1] "%1 মিনিট"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 সেকণ্ড"
+msgstr[1] "%1 সেকণ্ড"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 এবং %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "অবৈধ বস্তু।"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 দিন"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "আজ"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "গতকাল"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 মিনিট"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 ফাইলটি নেই"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Bengali INDIA
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Runa Bhattacharjee <runabh@gmail.com>, 2007.
+# Runa Bhattacharjee <runab@redhat.com>, 2008, 2009.
+# Runa Bhattacharjee <runab@fedoraproject.org>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-12-28 14:35+0530\n"
+"Last-Translator: Runa Bhattacharjee <runab@redhat.com>\n"
+"Language-Team: Bengali INDIA <anubad@lists.ankur.org.in>\n"
+"Language: bn_IN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"এই প্রোগ্রামটির জন্য কোনো লাইসেন্স নির্ধারণ করা হয়নি।\n"
+"অনুগ্রহ করে, লাইসেন্স সংক্রান্ত কোনো তথ্যের জন্য প্রোগ্রামের সাথে প্রাপ্ত নথিপত্র অথবা "
+"মূল সোর্স যাচাই করুন।\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "%1-র শর্তাধীন এই প্রোগ্রামটি বিতরণ করা হয়েছে।"
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU জেনারেল পাবলিক লাইসেন্স, সংস্করণ ২"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU লেসার জেনারেল পাবলিক লাইসেন্স, সংস্করণ ২"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD লাইসেন্স"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD লাইসেন্স"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "শিল্পকর্ম সংক্রান্ত লাইসেন্স"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "শিল্পকর্ম সংক্রান্ত লাইসেন্স"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q পাবলিক লাইসেন্স"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU জেনারেল পাবলিক লাইসেন্স, সংস্করণ ৩"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU লেসার জেনারেল পাবলিক লাইসেন্স, সংস্করণ ৩"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU লেসার জেনারেল পাবলিক লাইসেন্স, সংস্করণ ২"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "স্বনির্ধারিত"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "উল্লিখিত হয়নি"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>বিশ্বব্যাপী বিভিন্ন অনুবাদক দলের অবিরত প্রয়াসে বিশ্বের বিভিন্ন ভাষায় KDE অনুবাদ "
+"করা হয়েছে।</p><p>KDE-র আন্তর্জাতীয়করণ সম্বন্ধে অধিক জানার জন্য <a href=\"http://"
+"l10n.kde.org\">http://l10n.kde.org</a></p> দেখুন।"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "লেখকের পরিচিত প্রদর্শন করা হবে"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "লাইসেন্স সংক্রান্ত তথ্য প্রদর্শন করা হয়"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "এই অ্যাপ্লিকেশনের নির্মাতা অজ্ঞাত থাকতে ইচ্ছুক।"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 লিখেছেন\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "অনুগ্রহ করে http://bugs.kde.org-এ বাগ দায়ের করুন।\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "অনুগ্রহ করে %1-এ বাগ দায়ের করুন।\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 লাইব্রেরি দ্বারা, KDE 4-র সাথে সুসংগত ফ্যাক্টরি উপলব্ধ করা হয় না।"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "পূর্বাহ্ন"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "অপরাহ্ন"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "পূর্বাহ্ন"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "মেইল"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "থাই"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "সম্পাদনা"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "জমা করুন"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "পূর্বাহ্ন"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 কিলোবাইট"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 মেগাবাইট"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 গিগাবাইট"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 টেরাবাইট"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 পিটাবাইট"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 এক্সাবাইট"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 জেটাবাইট"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ইয়োটাবাইট"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 কিলেবাইট"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 মেগাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 গিগাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 টেরাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 পিটাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 এক্সাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 জেটাবাইট"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ইয়োটাবাইট"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 কিবিবাইট"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 মিবিবাইট"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 গিবিবাইট"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 টিবিবাইট"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 পেবিবাইট"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 এক্সবিবাইট"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 জেবিবাইট"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ইয়োবিবাইট"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 দিন"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ঘন্টা"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 মিনিট"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 সেকেন্ড"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 মিলিসেকেন্ড"
+msgstr[1] "%1 মিলিসেকেন্ড"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 দিন"
+msgstr[1] "%1 দিন"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ঘন্টা"
+msgstr[1] "%1 ঘন্টা"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 মিনিট"
+msgstr[1] "%1 মিনিট"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 সেকেন্ড"
+msgstr[1] "%1 সেকেন্ড"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ও %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "invalid flags"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "অবৈধ ফ্ল্যাগ"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 দিন"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "আজ"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "গতকাল"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 মিনিট"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "ফাইল %1 পাওয়া যায়নি"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# KDE breton translation
+# Copyright (C) 1998-2001 Free Software Foundation, Inc.
+# Jañ-Mai Drapier <jan-mai.drapier@mail.dotcom.fr>, 1998
+# Thierry Vignaud <tvignaud@mandriva.com>, 2001-2005
+# $Id$
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4-1.1\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2007-10-15 22:19+0200\n"
+"Last-Translator: Jañ-Mai Drapier <jan-mai.drapier@mail.dotcom.fr>\n"
+"Language-Team: Brezhoneg <Suav.Icb@wanadoo.fr>\n"
+"Language: br\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dasparzhet eo ar goulev-mañ hervez ar %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Aotre BSD"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Aotre BSD"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Alc'hwez foran"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Alc'hwez foran"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Alc'hwez foran"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Diouzhoc'h"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "N'eo ket spisaet"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Bez e vez troet KDE e kalz yezhoù a-drugarez da skipailhoù treiñ ar bed.</"
+"p><p>Gweladennit <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a> "
+"evit muioc'h a ditouroù diwar-benn arraktres KDE</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Diskouez titouroù diwar-benn an oberour"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Diskouez titouroù diwar-benn an aotre"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Viet-Namek"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 a oa skrivet gant\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Implijit http://bugs.kde.org evit reiñ da c'houzout ur gudenn.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Mar plij kemennit an drein kavet da %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "db"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "gm"
+
+#: lib/util/kformatprivate.cpp:105
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "War enaou"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "db"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Mat eo"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Kemmañ"
+
+#: lib/util/kformatprivate.cpp:111
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Aozañ"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Kas"
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "db"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiO"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiO"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiO"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiO"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiO"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiO"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiO"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 O"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiO"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiO"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiO"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiO"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiO"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiO"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiO"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiO"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 deiz"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 eur"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 munut"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 eilenn"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 eilenn"
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 deiz"
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 eur"
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 munut"
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 eilenn"
+msgstr[1] ""
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Anvioù sac'het"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 deiz"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hiziv"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dec'h"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 munut"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "N'eo ket bet kavet ar c'hiz %1\n"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: kde5\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2015-02-24 20:02+0100\n"
+"Last-Translator: Samir Ribić <megaribi@epn.ba>\n"
+"Language-Team: Bosnian\n"
+"Language: bs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Qt-Contexts: true\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nisu navedeni uslovi licenciranja za ovaj program.\n"
+"Provjerite da li su uslovi licenciranja navedeni u\n"
+"dokumentaciji ili izvornom kodu.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ovaj program se distribuira u skladu sa uslovima %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU‑ova Opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU‑ova Manje opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD licenca"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD licenca"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Umjetnička licenca"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Umjetnička licenca"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL 1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q javna licenca"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU‑ova Opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU‑ova Manje opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU‑ova Manje opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "specijalno"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "(nije navedena)"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE je preveden na razne jezike zahvaljujući radu prevodilaca iz "
+"cijelogsvijeta.</p><p>Za više informacija pravljenju međunarodnog KDE "
+"posjetite <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Prikaži podatke o autorima"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Prikaži podatke o licenci"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ovaj program je napisao neko ko želi da ostane anoniman."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "%s was written by:\n"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%s napisao:\n"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please use http://bugs.kde.org to report bugs."
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Koristite http://bugs.kde.org za prijavu grešaka."
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please report bugs to %s.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prijavite greške na %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka %1 ne pruža KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 bajtova"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 bajtova"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 bajtova"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m %2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h %2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h %2m %3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dana"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 sati"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuta"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundi"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekunda"
+msgstr[2] "%n milisekunda"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dan"
+msgstr[1] "%n dan"
+msgstr[2] "%n dan"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n sat"
+msgstr[1] "%n sat"
+msgstr[2] "%n sat"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minut"
+msgstr[2] "%n minut"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekunda"
+msgstr[2] "%n sekunda"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n dan"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "za %1 dan"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Danas"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Juče"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minuta"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of xml_mimetypes.po to bosanski
+# Chusslove Illich <caslav.ilic@gmx.net>, 2009, 2010.
+# Dalibor Djuric <dalibor.djuric@mozilla-srbija.org>, 2009.
+# KDE 4 <megaribi@epn.ba>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2013-01-14 19:17+0000\n"
+"Last-Translator: Samir Ribić <Unknown>\n"
+"Language-Team: bosanski <bs@li.org>\n"
+"Language: bs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-10-19 05:21+0000\n"
+"X-Generator: Launchpad (build 16807)\n"
+"X-Accelerator-Marker: \n"
+"X-Text-Markup: xmlents\n"
+"X-Environment: kde\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "Relax NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF bitmapski font"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "JAVA aplet"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML‑ov adapter proširenja"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE šema boja"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "paket K‑svežih-novotarija"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "K‑novčanikov novčanik"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugarov šablon izvještaja"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plazmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "superkaramba tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan dokument upravljanja projektima"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan dokument radnog paketa"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlatoov dokument upravljanja projektom"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlatoov radni paket upravljanja projektom"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugarova arhiva"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "veb arhiva"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C‑ova XML šema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio priključak"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbumov uvoz"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR slika"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE formati sirovih slika"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intelova heksadekadna objektna datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "spisak Kateinog priključka za učitavanje datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "muzička notacija ABC"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "paket fontova"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "windows server"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "windows radna grupa"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE sistemski monitor"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quantin projekat"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommanderov fajl"
+
+# >> KTuberling's file
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "Krompirkova datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolfova sačuvana igra"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolfov teren"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okularova arhiva dokumenata"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabrijev crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr Geov crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeov crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "KIG‑ov crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSegov dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "dokument za uvježbavanje rječnika"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "rječnik K‑kviza-riječi"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrindov/Callgrindov profilni popis"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "windows veza"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGetova spisak preuzimanja"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopeteova arhiva emotikona"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ kontakt"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoftov medija format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimidžova PIC slika"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Datoteka Qt jezika za označavanje"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# Translation of kcoreaddons5_qt.po to Catalan
+# Copyright (C) 1998-2020 This_file_is_part_of_KDE
+# This file is distributed under the license LGPL version 2.1 or
+# version 3 or later versions approved by the membership of KDE e.V.
+#
+# Sebastià Pla i Sanz <sps@sastia.com>, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007.
+# Antoni Bella Pérez <antonibella5@yahoo.com>, 2003, 2006, 2011, 2012, 2013, 2014, 2017, 2020.
+# Albert Astals Cid <aacid@kde.org>, 2004, 2005, 2007.
+# Josep Ma. Ferrer <txemaq@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+# Robert Millan <rmh@aybabtu.com>, 2009.
+# Orestes Mas <orestes@tsc.upc.edu>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-12-09 20:26+0100\n"
+"Last-Translator: Josep Ma. Ferrer <txemaq@gmail.com>\n"
+"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Accelerator-Marker: &\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"No s'ha especificat cap terme de llicència per a aquest programa.\n"
+"Si us plau, busqueu els termes de llicència a la documentació\n"
+"o al codi font.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Aquest programa es distribueix sota els termes de la %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Llicència pública general de GNU versió 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Llicència pública general reduïda de GNU versió 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Llicència BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Llicència BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Llicència artística"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Llicència artística"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Llicència pública Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Llicència pública general de GNU versió 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Llicència pública general reduïda de GNU versió 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Llicència pública general reduïda de GNU versió 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalitzada"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Sense especificar"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>El KDE s'ha traduït a molts idiomes gràcies al treball dels equips de "
+"traducció arreu del món.</p><p>Si voleu més informació quant a la "
+"internacionalització del KDE, visiteu <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a>.</p> <p>Trobareu informació quant a l'equip de "
+"voluntaris que tradueix el KDE al català a <a href=\"https://l10n.kde.org/"
+"team-infos.php?teamcode=ca\">https://l10n.kde.org/team-infos.php?"
+"teamcode=ca</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostra informació sobre l'autor."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostra informació sobre la llicència."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"El nom del fitxer base de l'entrada de l'escriptori per a aquesta aplicació."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nom del fitxer"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Aquesta aplicació la va escriure algú que vol restar anònim."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 el va escriure:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Si us plau, useu https://bugs.kde.org per a informar dels errors."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Informeu dels errors a %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La biblioteca %1 no ofereix cap KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 kB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dies"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hores"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuts"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segons"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n mil·lisegon"
+msgstr[1] "%n mil·lisegons"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dia"
+msgstr[1] "%n dies"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n hores"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minuts"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segon"
+msgstr[1] "%n segons"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data no vàlida"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "En dos dies"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Demà"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Avui"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ahir"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Fa dos dies"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Ara mateix"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "fa %1 minuts"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "El camí %1 no existeix"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Ha fallat en executar «lsof» amb el codi d'error %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "Windows no admet KListOpenFilesJob"
--- /dev/null
+# Translation of kde5_xml_mimetypes.po to Catalan
+# Copyright (C) 2009-2020 This_file_is_part_of_KDE
+# This file is distributed under the license LGPL version 2.1 or
+# version 3 or later versions approved by the membership of KDE e.V.
+# or the same license as the source of its messages in English.
+#
+# Josep Ma. Ferrer <txemaq@gmail.com>, 2009, 2010, 2011, 2014, 2015, 2017, 2020.
+# Antoni Bella Pérez <antonibella5@yahoo.com>, 2014, 2015, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons xml mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-26 12:07+0100\n"
+"Last-Translator: Josep Ma. Ferrer <txemaq@gmail.com>\n"
+"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Accelerator-Marker: &\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD d'àudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Tipus de lletra de mapa de bits SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Miniaplicació Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adaptador de l'extensió KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Esquema de color del KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Paquet del KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Cartera del KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Plantilla d'informe del Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "Plasmoide"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Tema del SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Document per a la gestió de projectes del Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Document de paquet de treball del Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Document per a la gestió de projectes del KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Paquet de treball per a la gestió de projectes del KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Arxiu del Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "Arxiu web"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Esquema XML de la W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Fitxer de connector RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Importació del KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Imatge HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formats d'imatge RAW del KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Fitxer objecte hexadecimal d'Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Llista de connector carregador de la llista de fitxers del Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Fitxer de notació musical abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "Paquet de tipus de lletra"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Servidor de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Treball en grup de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Monitor del sistema del KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Tema del KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Projecte del Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Fitxer del Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "Patata"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Joc desat del Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Camp del Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Arxiu de document de l'Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Figura del Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Figura del Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Figura del KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Figura del Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Document del KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "Document de l'entrenador de vocabulari"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Fitxer del KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Vocabulari del KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Bolcat d'anàlisi de rendiment del Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Fitxer del modelador UML Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Enllaç de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Llista de baixades del KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Arxiu d'emoticones del Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Contacte de l'ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Format de suports de Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Document RDF del Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Imatge PIC de Softimage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Fitxer de llenguatge de marques de les Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Opcions de configuració del KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Opcions de generació de codi del KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Declaració d'IU del KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Declaració del KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Informe del KCrash"
--- /dev/null
+# Translation of kcoreaddons5_qt.po to Catalan (Valencian)
+# Copyright (C) 1998-2019 This_file_is_part_of_KDE
+# This file is distributed under the license LGPL version 2.1 or
+# version 3 or later versions approved by the membership of KDE e.V.
+#
+# Sebastià Pla i Sanz <sps@sastia.com>, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007.
+# Antoni Bella Pérez <antonibella5@yahoo.com>, 2003, 2006, 2011, 2012, 2013, 2014, 2017.
+# Albert Astals Cid <aacid@kde.org>, 2004, 2005, 2007.
+# Josep Ma. Ferrer <txemaq@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
+# Robert Millan <rmh@aybabtu.com>, 2009.
+# Orestes Mas <orestes@tsc.upc.edu>, 2010.
+# Empar <montoro_mde@gva.es>, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2019-06-17 13:08+0200\n"
+"Last-Translator: Empar <montoro_mde@gva.es>\n"
+"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
+"Language: ca@valencia\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Accelerator-Marker: &\n"
+"X-Generator: Poedit 2.0.6\n"
+"X-Qt-Contexts: true\n"
+"X-Project-Style: kde\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"No s'ha especificat cap terme de llicència per a aquest programa.\n"
+"Per favor, busqueu els termes de llicència en la documentació\n"
+"o en el codi font.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Aquest programa es distribueix sota els termes de la %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Llicència pública general de GNU versió 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Llicència pública general reduïda de GNU versió 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Llicència BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Llicència BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Llicència artística"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Llicència artística"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Llicència pública Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Llicència pública general de GNU versió 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Llicència pública general reduïda de GNU versió 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Llicència pública general reduïda de GNU versió 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalitzada"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Sense especificar"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE s'ha traduït a molts idiomes gràcies al treball dels equips de "
+"traducció arreu del món.</p><p>Si voleu més informació quant a la "
+"internacionalització del KDE, visiteu <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a>.</p> <p>Trobareu informació quant a l'equip de "
+"voluntaris que tradueix el KDE al català i l'adapta a la variant valenciana "
+"a <a href=\"https://cat.kde.org\">https://cat.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostra informació sobre l'autoria."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostra informació sobre la llicència."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"El nom del fitxer base de l'entrada de l'escriptori per a aquesta aplicació."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nom del fitxer"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Aquesta aplicació la va escriure algú que vol quedar en l'anonimat."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 el va escriure:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Per favor, utilitzeu https://bugs.kde.org per a informar dels errors."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Informeu dels errors a %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La biblioteca %1 no ofereix cap KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 kB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dies"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hores"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuts"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segons"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n mil·lisegon"
+msgstr[1] "%n mil·lisegons"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dia"
+msgstr[1] "%n dies"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n hores"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minuts"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segon"
+msgstr[1] "%n segons"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data no vàlida"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n dia"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Demà"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hui"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ahir"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minuts"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Translation of kde5_xml_mimetypes.po to Catalan (Valencian)
+# Copyright (C) 2009-2017 This_file_is_part_of_KDE
+# This file is distributed under the license LGPL version 2.1 or
+# version 3 or later versions approved by the membership of KDE e.V.
+#
+# Josep Ma. Ferrer <txemaq@gmail.com>, 2009, 2010, 2011, 2014, 2015, 2017.
+# Antoni Bella Pérez <antonibella5@yahoo.com>, 2014, 2015.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2017-11-23 22:47+0100\n"
+"Last-Translator: Josep Ma. Ferrer <txemaq@gmail.com>\n"
+"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
+"Language: ca@valencia\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Accelerator-Marker: &\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD àudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Tipus de lletra de mapa de bits SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Miniaplicació Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adaptador de l'extensió KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Esquema de color del KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Paquet del KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Cartera del KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Plantilla d'informe del Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "Plasmoide"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Tema del SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Document per a la gestió de projectes del Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Document de paquet de treball del Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Document per a la gestió de projectes del KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Paquet de treball per a la gestió de projectes del KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Arxiu del Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "Arxiu web"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Esquema XML de la W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Fitxer del connector RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Importació del KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Imatge HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formats d'imatge RAW del KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Fitxer objecte hexadecimal d'Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Llista del connector carregador de llista de fitxers del Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Fitxer de notació musical abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "Paquet de tipus de lletres"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Servidor Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Treball en grup de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Controlador del sistema del KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Tema del KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Projecte del Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Fitxer del Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "Patata"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Joc guardat del Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Camp del Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Arxiu de document de l'Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Figura del Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Figura del Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Figura del KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Figura del Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Document del KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "Document de l'entrenador de vocabulari"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Fitxer del KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Vocabulari del KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Bolcat de l'anàlisi de rendiment del Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Fitxer del modelador UML Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Enllaç del Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Llista de baixades del KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Arxiu de les emoticones del Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Contacte de l'ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Format de suports de Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Document RDF del Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Imatge PIC de Softimage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Fitxer de llenguatge de marques de les Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+#, fuzzy
+#| msgid "KConfigXT Configuration Options"
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Opcions de configuració del KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+#, fuzzy
+#| msgid "KConfigXT Code Generation Options"
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Opcions de generació de codi del KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+#, fuzzy
+#| msgid "KXMLGUI UI Declaration"
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Declaració IU KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+#, fuzzy
+#| msgid "KNotification Declaration"
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Declaració del KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Qırımtatarca (Qırım Türkçesi)
+# Copyright (C) 2008 This_file_is_part_of_KDE
+# This file is distributed under the same license as the kdelibs package.
+#
+# Reşat SABIQ <tilde.birlik@gmail.com>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-02-12 23:29-0600\n"
+"Last-Translator: Reşat SABIQ <tilde.birlik@gmail.com>\n"
+"Language-Team: Qırımtatarca (Qırım Türkçesi)\n"
+"Language: crh\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Bu program %1 şartları altında dağıtıla."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL sürüm 2 (v2)"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU Aleniy Litsenziyası Sürüm 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL sürüm 2 (v2)"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Daa Kiçik Aleniy Litsenziyası Sürüm 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Litsenziyası"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Litsenziyası"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Sanatkâr Litsenziyası"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Sanatkâr Litsenziyası"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL sürüm 1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Aleniy Litsenziyası"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL sürüm 3 (v3)"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU Umumiy Aleniy Litsenziyası Sürüm 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL sürüm 3 (v3)"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Daa Kiçik Umumiy Aleniy Litsenziyası Sürüm 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL sürüm 2 (v2)"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Daa Kiçik Aleniy Litsenziyası Sürüm 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Mahsus"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Belirtilmegen"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Müellif malümatını köster"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Litsenziya malümatını köster"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Bu uyğulama isimsiz qalmağa istegen birev tarafından yazıldı."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 \n"
+"%2 tarafından yazıldı"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Hatalarnı bildirmek içün lütfen http://bugs.kde.org qullanıñız.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Hatalarnı lütfen %1 adresine bildiriñiz.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 fabrikası KDE 4 kelişikli fabrikanı teklif etmey."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "üe"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "üs"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "üe"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "5. kün"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "May"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Tarir"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Teslim et"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "üe"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 kün"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 saat"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 daqqa"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 saniye"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 millisaniye"
+msgstr[1] "%1 millisaniye"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 kün"
+msgstr[1] "%1 kün"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 saat"
+msgstr[1] "%1 saat"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 daqqa"
+msgstr[1] "%1 daqqa"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 saniye"
+msgstr[1] "%1 saniye"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ve %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Keçersiz Taqvim Türü"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 kün"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Bugün"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Tünevin"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 daqqa"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 dosyesi yoq"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Lukáš Tinkl <lukas@kde.org>, 2010, 2011, 2012.
+# Vít Pelčák <vit@pelcak.org>, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012, 2013.
+# Vit Pelcak <vpelcak@suse.cz>, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-03-24 16:06+0100\n"
+"Last-Translator: Vit Pelcak <vpelcak@suse.cz>\n"
+"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Lokalize 20.12.3\n"
+"X-Language: cs_CZ\n"
+"X-Source-Language: en_US\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Pro tento program nebyly určeny žádné licenční podmínky.\n"
+"Prosím prohlédněte si dokumentaci nebo zdrojové texty,\n"
+"přejete-li si se dozvědět o licenčních podmínkách.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Tento program je distribuován za podmínek %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License verze 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public licence verze 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD licence"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD licence"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Umělecká licence"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Umělecká licence"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q veřejná licence"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public licence verze 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public licence verze 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public licence verze 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Vlastní"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Neurčeno"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE je přeloženo do mnoha jazyků díky práci překladatelských týmů po "
+"celém světě.</p><p>Více informací o internacionalizaci KDE najdete na <a "
+"href=\"https://l10n.kde.org\">https://l10n.kde.org</a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Zobrazit informaci o autorech."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Zobrazit informaci o licenci."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Základní název souboru položky na ploše pro tuto aplikaci."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "název souboru"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Tato aplikace byla napsána někým, kdo chce zůstat v anonymitě."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 napsal:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Prosím, pro hlášení chyb použijte https://bugs.kde.org."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prosím hlaste chyby na %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Knihovna '%1' neposkytuje KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dnů"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hodin"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minut"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekund"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekundy"
+msgstr[2] "%n milisekund"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n den"
+msgstr[1] "%n dny"
+msgstr[2] "%n dnů"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hodina"
+msgstr[1] "%n hodiny"
+msgstr[2] "%n hodin"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuta"
+msgstr[1] "%n minuty"
+msgstr[2] "%n minut"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekundy"
+msgstr[2] "%n sekund"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 a %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Neplatné datum"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Během dvou dnů"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Zítra"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Dnes"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Včera"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Před dvěma dny"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Právě teď"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "před %1 minutou"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Path %1 neexistuje"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Spuštění `lsof' selhalo s chybou %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob není na Windows podporováno"
--- /dev/null
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Vít Pelčák <vit@pelcak.org>, 2010, 2011, 2013, 2014, 2018, 2020, 2021.
+# Lukáš Tinkl <ltinkl@redhat.com>, 2010.
+# Vit Pelcak <vpelcak@suse.cz>, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-03-25 10:07+0100\n"
+"Last-Translator: Vit Pelcak <vpelcak@suse.cz>\n"
+"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Lokalize 20.12.3\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Audio CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Bitmapový font SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java applet"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adaptér pro KHTML rozšíření"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Barevné schéma KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Balíček KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Schránka KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Šablona hlášení Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Motiv Superkaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Dokument pro správu projektů Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Dokument pracovního balíčku Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Dokument řízení projektů v KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Pracovní balíček řízení projektů v KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Archiv Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "webový archiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML schéma"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Soubor modulu RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Import KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR obrázek"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formáty obrázků raw v KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® hexadecimální objektový soubor"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Soubor hudební notace abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "balíček písem"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows server"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Pracovní skupina Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Monitor systému pro KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Motiv KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Projekt Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Soubor Kommanderu"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "brambora"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Uložená hra Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kurz Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Archiv dokumentu Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Obrázek Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Obrázek Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Obrázek KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Obrázek Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Dokument KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "Dokument tréningu slovní zásoby"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Soubor KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Slovní zásoba KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Výpis profilu Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Soubor Umbrello UML Modeller"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Odkaz Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Seznam stahování KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Archiv emotikonů Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Kontakt ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Dokument Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Obrázek Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Soubor Qt Markup Language"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Možnosti nastavení KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Volby generování kódu KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Deklarace KXMLGUI UI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Report KCrash"
--- /dev/null
+# translation of kdelibs4.po to Kaszëbsczi
+#
+# Michôł Òstrowsczi <michol@linuxcsb.org>, 2006, 2007, 2008, 2009.
+# Mark Kwidzińsczi <mark@linuxcsb.org>, 2006, 2007, 2008, 2009.
+# Mark Kwidzińśczi <mark@linuxcsb.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-12-04 22:09+0100\n"
+"Last-Translator: Mark Kwidzińśczi <mark@linuxcsb.org>\n"
+"Language-Team: Kaszëbsczi <i18n-csb@linuxcsb.org>\n"
+"Language: csb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2)\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Felëje wëdowiédzô ò licencëji dlô ti programë.\n"
+"Proszã sprôwdzëc dokùmentacëjã abò zdroje programë, bë\n"
+"nalezc licencëjã.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Programa je ùżëczonô wedle %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License wersëjô 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License wersëjô 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licencëjô BSD"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licencëjô BSD"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licencëjô Artistic"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licencëjô Artistic"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licencëjô Q Public"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License wersëjô 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License wersëjô 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License wersëjô 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Swòjô"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nie wëznaczonô"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE je dolmaczoné przez Kaszëbsczé Karno Dolmaczów, chtërnegò starnã "
+"nalezesz pòd adresą <a href=\"http://kde.linuxcsb.org\">kde.linuxcsb.org</"
+"a></p> <p>Jeżle nalezesz zmiłczi ë felë w dolmaczënkù, napiszë proszã ò tim "
+"na adresã <a href=\"mailto:i18n-csb@linuxcsb.org\">i18n-csb@linuxcsb.org</"
+"a>. Zazdrzë téż na naji starnë wspiarca dlô ôpen-ùdbów <a href=\"http://www."
+"linuxcsb.org\">www.linuxcsb.org</a></p> <p>Roczimë téż do pòmòcë przë ti "
+"ùdbie! Wëdowiédzô ò tim jakno mòżesz z nama wespółrobic nalezesz na naji "
+"starnie.</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Pòkôżë wëdowiédzã ò ùsôdzcë"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Pòkôżë wëdowiédzã ò licencëji"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Na programa ùsôdzëł człowiek co chcôł òstac anonimòwi."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 napisóny przez\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Do zgłôszaniô felów proszã brëkòwac starnã http://bugs.kde.org.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Zgłoszë rapòrtë ò felach do %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Bibloteka %1 nie dôwô infrastrukturë zgódny z KDE 4."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "dp"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pp"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "dp"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kia"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Miy"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pti"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Edicëjô"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Wëslë"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "dp"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dni"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 gòdz."
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 min."
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sek."
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisek."
+msgstr[1] "%1 milisek."
+msgstr[2] "%1 milisek."
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dni"
+msgstr[1] "%1 dni"
+msgstr[2] "%1 dni"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 gòdz."
+msgstr[1] "%1 gòdz."
+msgstr[2] "%1 gòdz."
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 min."
+msgstr[1] "%1 min."
+msgstr[2] "%1 min."
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sek."
+msgstr[1] "%1 sek."
+msgstr[2] "%1 sek."
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ë %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Lëchi ôrt kalãdôrza"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 dni"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Dzysô"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Wczora"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 min."
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Felëje lopk %1"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Cyfieithiad o kdelibs4.po i Cymraeg
+# translation of kdelibs4.po to Cymraeg
+# Translation of kdelibs4.po to Cymraeg
+# Translation of clearfuzzytest.po to Cymraeg
+# translation of clearfuzzytest.po to Cymraeg
+# translation of clearfuzzy.po to Cymraeg
+# KDE yn Gymraeg.
+# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+# www.kyfieithu.co.uk <kyfieithu@dotmon.com>, 2003.
+# Kgyfieithu <kyfieithu@dotmon.com>, 2003.
+# KGyfieithu <kyfieithu@dotmon.com>, 2003.
+# KD at KGyfieithu <kyfieithu@dotmon.com>, 2003, 2004.
+# Kyfieithu <kyfieithu@dotmon.com>, 2004.
+# Kevin Donnelly <kevin@dotmon.com>, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2005-01-28 17:54+0000\n"
+"Last-Translator: Kevin Donnelly <kevin@dotmon.com>\n"
+"Language-Team: Cymraeg\n"
+"Language: cy\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Ni phenodwyd termau trwyddedu am y rhaglen yma.\n"
+"Gwiriwch y ddogfeniaeth neu'r côd am unrhyw dermau \n"
+"trwyddedu.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dosbarthir y rhaglen yma dan dermau'r %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Trwydded:"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Trwydded:"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Allwedd Gyhoeddus"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Allwedd Gyhoeddus"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Allwedd Gyhoeddus"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "A&ddasu"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nid oes darparwr wedi ei dewis."
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Cyfieithir KDE i mewn i lawer o ieithoedd diolch i tîmau cyfieithu dros y "
+"byd i gyd.</p><p>Am ragor o wybodaeth ar rhyngwledeiddio KDE, ymwelwch â "
+"http://i18n.kde.org.</p>Am ragor o wybodaeth ar KDE a meddalwedd rhydd yn "
+"Gymraeg, ewch i http://www.kyfieithu.co.uk</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Dangos gwybodaeth awdur"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Dangos gwybodaeth trwydded"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Fietnamaidd"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ysgrifennwyd %1 gan berson sy'n dymuno aros yn anhysbys."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"ysgrifennwyd %1 gan\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Defnyddiwch http://bugs.kde.org er mwyn adrodd namau, peidiwch ac anfon "
+"ebost i'r awduron yn uniongyrchol.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ""
+"Defnyddiwch %1 er mwyn adrodd namau, peidiwch ac anfon ebost i'r awduron yn "
+"uniongyrchol.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Nid y'w rhaglengell %1 yn cynnig swyddogaeth %2."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "yb"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "yp"
+
+#: lib/util/kformatprivate.cpp:105
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Ymlaen"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "yb"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Iawn"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Addasu"
+
+#: lib/util/kformatprivate.cpp:111
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Golygu"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr " Yi"
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr " Yi"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Cyflwyno"
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "yb"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "Dydd Llun"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 o ddewisiadau"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 o ddewisiadau"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 o ddewisiadau"
+msgstr[1] "%1 o ddewisiadau"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "Dydd Llun"
+msgstr[1] "Dydd Llun"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 o ddewisiadau"
+msgstr[1] "%1 o ddewisiadau"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 o ddewisiadau"
+msgstr[1] "%1 o ddewisiadau"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "baneri annilys"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Dydd Llun"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Dydd Llun"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dydd Mawrth"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 o ddewisiadau"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Methu darganfod yr ardull %1\n"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Martin Schlander <mschlander@opensuse.org>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+# Keld Simonsen <keld@keldix.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-01-30 19:42+0100\n"
+"Last-Translator: Martin Schlander <mschlander@opensuse.org>\n"
+"Language-Team: Danish <kde-i18n-doc@kde.org>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 18.12.3\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Der er ikke angivet licensbetingelser for dette program.\n"
+"Tjek venligst dokumentationen eller kilden for\n"
+"licensbetingelser.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dette program distribueres under betingelserne i %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Tilpasset"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ikke angivet"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE er oversat til mange sprog takket være oversættelsesholdenes arbejde "
+"verden over.</p> <p>Har du kommentarer eller forslag til forbedringer "
+"angående den danske oversættelse af KDE, er du velkommen til at kontakte "
+"ovenstående.</p> <p>Se også <a href=\"http://wiki.dansk-gruppen.dk/\">http://"
+"wiki.dansk-gruppen.dk/</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Vis udviklerinformation"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Vis licensinformation"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Basisfilnavnet for desktop-indgangen for dette program."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "filnavn"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Dette program blev skrevet af en som ønsker at forblive anonym."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 blev skrevet af:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Brug venligst https://bugs.kde.org til at rapportere om fejl."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Rapportér venligst fejl til %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteket %1 tilbyder ikke KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 days"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 timer"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutter"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekunder"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekund(er)"
+msgstr[1] "%n millisekund(er)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dag(e)"
+msgstr[1] "%n dag(e)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n time(r)"
+msgstr[1] "%n time(r)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut(ter)"
+msgstr[1] "%n minut(ter)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekund(er)"
+msgstr[1] "%n sekund(er)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 og %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ugyldig dato"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Om to dage"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "I morgen"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "I dag"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "I går"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "For to dage siden"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minutter"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Stil %1 findes ikke."
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Kunne ikke køre `lsof' fejlkode %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob er ikke understøttet på Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Martin Schlander <mschlander@opensuse.org>, 2009, 2010, 2011, 2014, 2017, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-01-30 19:45+0100\n"
+"Last-Translator: Martin Schlander <mschlander@opensuse.org>\n"
+"Language-Team: Danish <kde-i18n-doc@kde.org>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 18.12.3\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Cd-lyd"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF bitmap-skrifttype"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java applet"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML udvidelsesadapter"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE farvetema"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff-pakke"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Tegnebog til KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar rapportskabelon"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba-tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan projekthåndteringsdokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan Work Package-dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato projekthåndteringsdokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato work-pakke til projekthåndtering"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar-arkiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "Webarkiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML-skema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio plugin-fil"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum import"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR-billede"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE raw-billedformater"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® hexadecimal objektfil"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Liste over plugins til fillisteindlæsning i Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc musiknode-fil"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "skrifttypepakke"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows-server"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows-arbejdsgruppe"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE systemovervågning"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE-tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta-projekt"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander-fil"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Gemt spil til Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf-bane"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular dokumentarkiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg-dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "ordforrådstræningsdokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot-fil"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Ordforråd til KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind profil-dump"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML modelleringsfil"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows-link"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet downloadliste"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete emotikon-arkiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ-kontakt"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft medieformat"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF-dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC-billede"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt Markup Language-fil"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+#, fuzzy
+#| msgid "KConfigXT Configuration Options"
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Konfigurationsmuligheder til KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+#, fuzzy
+#| msgid "KConfigXT Code Generation Options"
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Kodegenereringsmuligheder til KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+#, fuzzy
+#| msgid "KXMLGUI UI Declaration"
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI UI-erklæring"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+#, fuzzy
+#| msgid "KNotification Declaration"
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification-erklæring"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+#, fuzzy
+#| msgid "KCrash Report"
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash-rapport"
--- /dev/null
+# Thomas Diehl <thd@kde.org>, 2002, 2003, 2004, 2005.
+# Stefan Winter <swinter@kde.org>, 2004.
+# Thomas Fischer <thomas.fischer@t-fischer.net>, 2004.
+# Stephan Johach <hunsum@gmx.de>, 2004, 2005, 2006, 2007.
+# Georg Schuster <gschuster@utanet.at>, 2005.
+# Thomas Reitelbach <tr@erdfunkstelle.de>, 2005, 2006, 2007, 2008, 2009.
+# Burkhard Lück <lueck@hube-lueck.de>, 2006, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017, 2018, 2019, 2020, 2021.
+# Frederik Schwarzer <schwarzer@kde.org>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016.
+# Johannes Obermayr <johannesobermayr@gmx.de>, 2010.
+# Panagiotis Papadopoulos <pano_90@gmx.net>, 2010.
+# Rolf Eike Beer <kde@opensource.sf-tec.de>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-03-01 13:17+0100\n"
+"Last-Translator: Burkhard Lück <lueck@hube-lueck.de>\n"
+"Language-Team: German <kde-i18n-de@kde.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Für dieses Programm ist keine Lizenz angegeben.\n"
+"Bitte sehen Sie in der Dokumentation oder im Quellcode\n"
+"nach den Lizenzbedingungen.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dieses Programm wird unter den Bedingungen der %1 veröffentlicht."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-Lizenz"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-Lizenz"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Benutzerdefiniert"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nicht angegeben"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE wird dank der Arbeit von Teams in aller Welt in viele Sprachen "
+"übersetzt.</p><p>Allgemeine Informationen zur Übersetzung finden Sie unter "
+"<a href=\"https://l10n.kde.org\">http://l10n.kde.org</a>, <br/>Informationen "
+"zur deutschen Übersetzung unter <a href=\"https://l10n.kde.org/teams/de"
+"\">http://l10n.kde.org/teams/de</a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Autor-Informationen anzeigen."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Lizenz-Informationen anzeigen."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Der Basis-Dateiname des Desktop-Eintrags dieser Anwendung."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Dateiname"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Diese Anwendung wurde von jemandem geschrieben, der/die lieber anonym "
+"bleiben möchte."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 wurde geschrieben von:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Bitte verwenden Sie https://bugs.kde.org für Fehlerberichte und Wünsche."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Bitte berichten Sie Fehler an %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Die Bibliothek %1 enthält keine KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1 m %2.%3 s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1 m %2 s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1 h %2 m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1 h %2 m %3.%4 s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1 h %2 m %3 s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 Tage"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 Stunden"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 Minuten"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 Sekunden"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n Millisekunde(n)"
+msgstr[1] "%n Millisekunde(n)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n Tag(e)"
+msgstr[1] "%n Tag(e)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n Stunde(n)"
+msgstr[1] "%n Stunde(n)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n Minute(n)"
+msgstr[1] "%n Minute(n)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n Sekunde(n)"
+msgstr[1] "%n Sekunde(n)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 und %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ungültiges Datum"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "In zwei Tagen"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Morgen"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Heute"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Gestern"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Vor zwei Tagen"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Gerade eben"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "Vor %1 Minuten"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Der Pfad %1 existiert nicht."
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Ausführung von „lsof“ ist fehlgeschlagen, Fehlercode %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob wird in Windows nicht unterstützt"
--- /dev/null
+# Burkhard Lück <lueck@hube-lueck.de>, 2009, 2013, 2014, 2017, 2018, 2020, 2021.
+# Thomas Reitelbach <tr@erdfunkstelle.de>, 2009.
+# Johannes Obermayr <johannesobermayr@gmx.de>, 2010.
+# Panagiotis Papadopoulos <pano_90@gmx.net>, 2010.
+# Frederik Schwarzer <schwarzer@kde.org>, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-03-01 13:17+0100\n"
+"Last-Translator: Burkhard Lück <lueck@hube-lueck.de>\n"
+"Language-Team: German <kde-i18n-de@kde.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD-Audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF-Bitmap-Schriftart"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java-Miniprogramm"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adapter für KHTML-Erweiterungen"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE-Farbschema"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff-Paket"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet-Passwortspeicher"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar-Berichtsvorlage"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "Plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba-Design"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra-Plan-Projektverwaltungdokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra-Plan-Arbeitspaketdokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato-Projektverwaltungs-Dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato-Projektverwaltungs-Arbeitspaket"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar-Archiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "Web-Archiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C-XML-Schema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio-Moduldatei"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum-Import"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR-Bild"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE-Roh-Bildformate"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel®-Hexadezimal-Objektdatei"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate-Dateilisten-Modul"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc-Musik-Notationsdatei"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "Schriftartenpaket"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows-Server"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows-Arbeitsgruppe"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE-Systemüberwachung"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE-Design"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta-Projekt"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander-Datei"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+# Kolf-Spielstand?
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf – gespeichertes Spiel"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf-Platz"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular-Dokumentarchiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri-Zeichnung"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr.-Geo-Zeichnung"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo-Zeichnung"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig-Zeichnung"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg-Dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "Vokabeltrainer-Dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot-Datei"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz-Vokabular"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind-Profil-Ausgabe"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello-UML-Datei"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows-Verknüpfung"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet-Downloadliste"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete-Emoticons-Archiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ-Kontakt"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft-Media-Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle-RDF-Dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage-PIC-Bild"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt-Markup-Language-Datei"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT-Einrichtungsoptionen"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT-Optionen zur Quelltexterzeugung"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI-UI-Deklaration"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification-Deklaration"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash-Bericht"
--- /dev/null
+# translation of kdelibs4.po to Greek
+# translation of kdelibs4.po to
+# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Last MAJOR revision (whole file) (29-03-2003 - Stergios Dramis).
+#
+# Dimitris Kamenopoulos <d.kamenopoulos@mail.ntua.gr>, 2000-2002.
+# Stergios Dramis <sdramis@egnatia.ee.auth.gr>, 2002-2004.
+# Κώστας Μπουκουβάλας <quantis@hellug.gr>, 2005.
+# Spiros Georgaras <sngeorgaras@otenet.gr>, 2005, 2006, 2007, 2008.
+# Toussis Manolis <manolis@koppermind.homelinux.org>, 2006, 2007, 2008, 2009.
+# Spiros Georgaras <sng@hellug.gr>, 2007, 2008.
+# Σπύρος Γεωργαράς <sngeorgaras@otenet.gr>, 2008.
+# Petros <pvidalis@gmail.com>, 2009.
+# Petros Vidalis <p_vidalis@hotmail.com>, 2010, 2011.
+# Dimitrios Glentadakis <dglent@gmail.com>, 2010, 2011, 2012, 2013, 2014.
+# nikos, 2011.
+# Stelios <sstavra@gmail.com>, 2012, 2013, 2020, 2021.
+# Dimitris Kardarakos <dimkard@gmail.com>, 2015, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-06-12 21:45+0300\n"
+"Last-Translator: Stelios <sstavra@gmail.com>\n"
+"Language-Team: Greek <kde-i18n-el@kde.org>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 20.04.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Δεν έχουν καθοριστεί όροι χρήσης για αυτό το πρόγραμμα.\n"
+"Παρακαλώ ελέγξτε την τεκμηρίωση ή τον πηγαίο κώδικά του\n"
+"για οποιονδήποτε όρο χρήσης.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Το πρόγραμμα διανέμεται υπό τους όρους της %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Γενική Άδεια Δημόσιας Χρήσης GNU έκδοση 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Ελάσσονα Γενική Άδεια Δημόσιας Χρήσης GNU έκδοση 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Άδεια BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Άδεια BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Καλλιτεχνική άδεια"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Καλλιτεχνική άδεια"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Δημόσια άδεια Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Γενική Άδεια Δημόσιας Χρήσης GNU έκδοση 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Ελάσσονα Γενική Άδεια Δημόσιας Χρήσης GNU έκδοση 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Ελάσσονα Γενική Άδεια Δημόσιας Χρήσης GNU έκδοση 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Προσαρμοσμένη"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Δεν καθορίζεται"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Η μετάφραση του KDE σε πολλές γλώσσες γίνεται με τη δουλειά των ομάδων "
+"μέτάφρασης σε όλον τον κόσμο.</p><p> Για περισσότερες πληροφορίες σχετικά με "
+"τη διεθνοποίηση του KDE επισκεφτείτε το <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Εμφάνιση πληροφοριών για τον συγγραφέα."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Εμφάνιση πληροφοριών άδειας χρήσης."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"Το κύριο όνομα αρχείου της καταχώρησης επιφάνειας εργασίας για αυτήν την "
+"εφαρμογή."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "όνομα αρχείου"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Αυτή η εφαρμογή γράφτηκε από κάποιον που θέλει να παραμείνει ανώνυμος."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "Το %1 γράφτηκε από:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Χρησιμοποιήστε το https://bugs.kde.org για να αναφέρετε σφάλματα."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Αναφέρετε σφάλματα στο %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Η βιβλιοθήκη %1 δεν προσφέρει KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "μ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ημέρες"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ώρες"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 λεπτά"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 δευτερόλεπτα"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n χιλιοστό(α) του δευτερολέπτου"
+msgstr[1] "%n χιλιοστό(α) του δευτερολέπτου"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n ημέρα(ες)"
+msgstr[1] "%n ημέρα(ες)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n ώρα(ες)"
+msgstr[1] "%n ώρα(ες)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n λεπτό(ά)"
+msgstr[1] "%n λεπτό(ά)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n δευτερόλεπτo(α)"
+msgstr[1] "%n δευτερόλεπτo(α)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 και %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Μη έγκυρη ημερομηνία"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Σε δύο ημέρες"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Αύριο"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Σήμερα"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Χθες"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Δύο ημέρες πριν"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Μόλις τώρα"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 λεπτά πριν"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Η διαδρομή %1 δεν υπάρχει"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Αποτυχία εκτέλεσης 'lsof' κωδικός σφάλματος %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "Το KListOpenFilesJob δεν υποστηρίζεται στα Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Famelis George <famelis@gmail.com>, 2009.
+# Petros <pvidalis@gmail.com>, 2009, 2010.
+# Petros Vidalis <p_vidalis@hotmail.com>, 2010.
+# Dimitrios Glentadakis <dglent@gmail.com>, 2012.
+# Antonis Geralis <capoiosct@gmail.com>, 2014.
+# Stelios <sstavra@gmail.com>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-11-04 09:19+0200\n"
+"Last-Translator: Stelios <sstavra@gmail.com>\n"
+"Language-Team: Greek <kde-i18n-el@kde.org>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 20.04.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD ήχου"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Γραμματοσειρά bitmap SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Μικροεφαρμογή Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Προσαρμογέας επέκτασης KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Θέμα χρωμάτων KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Πακέτο KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Πορτοφόλι KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Πρότυπο αναφοράς Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "πλασμοειδές"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Θέμα SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Έγγραφο διαχείρισης έργων Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Έγγραφο πακέτου εργασίας Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Έγγραφα διαχείρισης έργων KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Πακέτο εργασιών διαχείρισης έργων KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Αρχειοθήκη Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "Αρχειοθήκη ιστού"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Σχήμα W3C XML"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Αρχείο προσθέτου RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Εισαγωγή KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Εικόνα HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Τύποι ακατέργαστων τύπων εικόνας του KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Δεκαεξαδικό μεταφρασμένο αρχείο Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Λίστα αρχείου φόρτωσης λίστας πρόσθετων Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Αρχείο μουσικών συμβόλων abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "πακέτο γραμματοσειρών"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Εξυπηρετητής Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Ομάδα εργασίας Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Επόπτης συστήματος του KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Θέμα του KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Έργο Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Αρχείο Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "πατάτα"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Αποθηκευμένο παιχνίδι Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Πίστα Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Αρχειοθήκη εγγράφων Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Σχήμα Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Σχήμα Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Σχήμα KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Σχήμα Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Έγγραφο KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "έγγραφο εκπαιδευτή λεξιλογίου"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Αρχείο KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Λεξιλόγιο KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Αποτύπωση προφίλ Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Αρχείο μοντελοποίησης Umbrello UML"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Αρχείο δεσμού Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Λίστα λήψης KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Αρχειοθήκη εικονιδίων διάθεσης Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Επαφή ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Τύπος μέσων της Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Έγγραφο Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Εικόνα Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Αρχείο γλώσσας σήμανσης Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Επιλογές διαμόρφωσης KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Επιλογές γεννήτρια κώδικα KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Δήλωση KXMLGUI UI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Δήλωση KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Αναφορά KCrash"
--- /dev/null
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Language: en\n"
+"X-Qt-Contexts: true\n"
+
+#. @item:intext %1 is a whole number
+#: ../lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisecond"
+msgstr[1] "%n milliseconds"
+
+#. @item:intext %n is a whole number
+#: ../lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n day"
+msgstr[1] "%n days"
+
+#. @item:intext %n is a whole number
+#: ../lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hour"
+msgstr[1] "%n hours"
+
+#. @item:intext %n is a whole number
+#: ../lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minute"
+msgstr[1] "%n minutes"
+
+#. @item:intext %n is a whole number
+#: ../lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n second"
+msgstr[1] "%n seconds"
--- /dev/null
+# translation of kdelibs4.po to British English
+# Malcolm Hunter <malcolm.hunter@gmx.co.uk>, 2002,2003,2004, 2005, 2006, 2007, 2008, 2009.
+# Jonathan Riddell <kde-en-gb@jriddell.org>, 2003.
+# Andrew Coles <andrew_coles@yahoo.co.uk>, 2004, 2005, 2009, 2010.
+# Steve Allewell <steve.allewell@gmail.com>, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-11-21 11:39+0000\n"
+"Last-Translator: Steve Allewell <steve.allewell@gmail.com>\n"
+"Language-Team: British English <kde-l10n-en_gb@kde.org>\n"
+"Language: en_GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+"X-Generator: Lokalize 20.08.3\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "This program is distributed under the terms of the %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public Licence Version 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public Licence Version 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Licence"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Licence"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic Licence"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic Licence"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public Licence"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public Licence Version 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public Licence Version 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public Licence Version 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Custom"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Not specified"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalisation visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Show author information."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Show licence information."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "The base file name of the desktop entry for this application."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "file name"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"This application was written by somebody who wants to remain anonymous."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 was written by:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Please use https://bugs.kde.org to report bugs."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Please report bugs to %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "The library %1 does not offer a KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 days"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hours"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutes"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 seconds"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisecond"
+msgstr[1] "%n milliseconds"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n day"
+msgstr[1] "%n days"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hour"
+msgstr[1] "%n hours"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minute"
+msgstr[1] "%n minutes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n second"
+msgstr[1] "%n seconds"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 and %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Invalid date"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "In two days"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Tomorrow"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Today"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Yesterday"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Two days ago"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Just now"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minutes ago"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Path %1 does not exist"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Failed to execute `lsof' error code %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob is not supported on Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Andrew Coles <andrew_coles@yahoo.co.uk>, 2009, 2010, 2011.
+# Steve Allewell <steve.allewell@gmail.com>, 2014, 2017, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-11-06 12:41+0000\n"
+"Last-Translator: Steve Allewell <steve.allewell@gmail.com>\n"
+"Language-Team: British English <kde-l10n-en_gb@kde.org>\n"
+"Language: en_GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 20.08.2\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF bitmap font"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java applet"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML Extension Adaptor"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE colour scheme"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff package"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet wallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar report template"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba theme"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan project management document"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan work package document"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato project management document"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato project management work package"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar archive"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "web archive"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML schema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio plugin file"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum import"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR image"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE raw image formats"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® hexadecimal object file"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate file list loader plugin list"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc musical notation file"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "fonts package"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows server"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows workgroup"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE system monitor"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE theme"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta project"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander file"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf saved game"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf course"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular document archive"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg document"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "vocabulary trainer document"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot file"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz vocabulary"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind profile dump"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML Modeller file"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows link"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet download list"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete emoticons archive"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ contact"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF document"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC image"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt Markup Language file"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT Configuration Options"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT Code Generation Options"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI UI Declaration"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification Declaration"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash Report"
--- /dev/null
+# translation of kdelibs4.po to Esperanto
+# Esperantaj mesaĝoj por "kdelibs"
+# Copyright (C) 1998,2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#
+# Minuskloj: ĉ ĝ ĵ ĥ ŝ ŭ Majuskloj: Ĉ Ĝ Ĵ Ĥ Ŝ Ŭ
+#
+# Wolfram Diestel <wolfram@steloj.de>, 1998.
+# Heiko Evermann <heiko@evermann.de>, 2002, 2003.
+# Matthias Peick <matthias@peick.de>, 2004, 2005.
+# Oliver Kellogg <okellogg@users.sourceforge.net>,2007.
+# Cindy McKee <cfmckee@gmail.com>, 2007, 2008.
+# Axel Rousseau <axel@esperanto-jeunes.org>, 2009.
+# Michael Moroni <michael.moroni@mailoo.org>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-05-22 12:30+0200\n"
+"Last-Translator: Michael Moroni <michael.moroni@mailoo.org>\n"
+"Language-Team: Esperanto <kde-i18n-doc@kde.org>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Ne estas donitaj informoj pri permesilo por tiu programo.\n"
+"Bonvolu trarigardi la dokumentaron aŭ la fonttekstojn\n"
+"de la programo pri permesilo.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Tiu programo estas distribuata laŭ kondiĉoj de la %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU Ĝenerala Publika Permesilo Versio 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Ĝenerala Publika Permesilo Versio 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-Permesilo"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-Permesilo"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artista Permesilo"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artista Permesilo"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Publika Permesilo"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU Ĝenerala Publika Permesilo Versio 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Ĝenerala Publika Permesilo Versio 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Ĝenerala Publika Permesilo Versio 2"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Propra"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ne specifita"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE estas tradukita al multaj lingvoj, danke al la laboro de la tradukaj "
+"teamoj ĉie en la mondo.</p><p>Por detalaj informoj pri KDE-tradukado vizitu "
+"<a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Montri aŭtorinformon"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Montri permesilo-informon"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Tiu aplikaĵo estis skribita de iu, kiu volas resti anonima."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "%s was written by:\n"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%s estas skribita de:\n"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please use http://bugs.kde.org to report bugs."
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Bonvole uzu http://bugs.kde.org por la raporto de cimoj."
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please report bugs to %s.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Bonvole uzu %s por la raporto de cimoj.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La biblioteko %1 ne provizas KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Retmesaĝo"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Taja"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Redakti"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Sendi"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 tagoj"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horoj"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutoj"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundoj"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekundo"
+msgstr[1] "%n milisekundo"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n tago"
+msgstr[1] "%n tago"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n horo"
+msgstr[1] "%n horo"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minuto"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekundo"
+msgstr[1] "%n sekundo"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 kaj %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Nevalida ero."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n tago"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Morgaŭ"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hodiaŭ"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Hieraŭ"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minutoj"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Dosiero %1 ne troviĝis."
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Translation of xml_mimetypes into esperanto.
+# Axel Rousseau <axel@esperanto-jeunes.org>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2009-11-15 12:06+0100\n"
+"Last-Translator: Axel Rousseau <axel@esperanto-jeunes.org>\n"
+"Language-Team: esperanto <kde-i18n-eo@kde.org>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: pology\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Spanish
+# Translation of kdelibs4 to Spanish
+# Copyright (C) 2000-2007
+#
+# Pablo de Vicente <vicente@oan.es>, 2000-2002,2003, 2004.
+# Pablo de Vicente <vicnte@oan.es>, 2003.
+# Pablo de Vicente <p.devicente@wanadoo.es>, 2004, 2005.
+# Eloy Cuadra <ecuadra@eloihr.net>, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+# Pablo de Vicente <pablo.devicente@gmail.com>, 2005, 2006, 2007.
+# Enrique Matias Sanchez (aka Quique) <cronopios@gmail.com>, 2007.
+# Jaime Robles <jaime@kde.org>, 2007.
+# Javier Viñal <fjvinal@gmail.com>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-11-17 13:13+0100\n"
+"Last-Translator: Eloy Cuadra <ecuadra@eloihr.net>\n"
+"Language-Team: Spanish <kde-l10n-es@kde.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"First-Translator: Boris Wesslowski <Boris@Wesslowski.com>\n"
+"X-Generator: Lokalize 20.08.3\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"No se han indicado los términos de la licencia de este programa.\n"
+"Por favor, consulte la documentación o el código fuente para ver\n"
+"los términos de la licencia.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Este programa se distribuye bajo los términos de la %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licencia Pública General de GNU, versión 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licencia Pública General Menor de GNU, versión 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licencia BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licencia BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licencia Artística"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licencia Artística"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licencia Pública Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licencia Pública General de GNU, versión 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licencia Pública General Menor de GNU, versión 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licencia Pública General Menor de GNU, versión 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizada"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "No especificada"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE se traduce a muchos idiomas gracias al trabajo de equipos de "
+"traducción de todo el mundo.</p><p>Para más información sobre la "
+"internacionalización de KDE, visite <a href=\"https://l10n.kde.org\">https://"
+"l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Muestra información sobre el autor."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Muestra información sobre la licencia."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"El nombre de archivo base de la entrada de escritorio para esta aplicación."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nombre de archivo"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Esta aplicación fue escrita por alguien que quiere permanecer anónimo."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 fue escrito por:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Por favor, use https://bugs.kde.org para informar de fallos."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Por favor, informe de fallos a %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La biblioteca %1 no ofrece ninguna KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 días"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutos"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segundos"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisegundo"
+msgstr[1] "%n milisegundos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n día"
+msgstr[1] "%n días"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n horas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minutos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segundo"
+msgstr[1] "%n segundos"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 y %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Fecha no válida"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "En dos días"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Mañana"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hoy"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ayer"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Hace dos días"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Ahora mismo"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "Hace %1 minutos"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "La ruta %1 no existe"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "No se ha podido ejecutar `lsof'. Código de error: %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob no se puede usar en Windows"
--- /dev/null
+# translation of xml_mimetypes.po to Spanish
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Eloy Cuadra <ecuadra@eloihr.net>, 2009, 2010, 2011, 2014, 2017, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-26 12:47+0100\n"
+"Last-Translator: Eloy Cuadra <ecuadra@eloihr.net>\n"
+"Language-Team: Spanish <kde-l10n-es@kde.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 20.08.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Audio CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Tipo de letra de mapa de bits SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Miniaplicación Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adaptador de extensión de KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Esquema de color de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Paquete de KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Cartera de KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Plantilla de informe de Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoide"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Tema de SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Documento de gestión de proyecto de Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Documento de paquete de trabajo de Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Documento de gestión de proyecto de KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Paquete de trabajo de gestión de proyecto de KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Archivo de Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "archivo web"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Esquema XML del W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Archivo de complemento RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Importación de KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Imagen HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formatos de imagen en bruto de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Archivo de código objeto hexadecimal de Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Lista de complementos de carga de listas de archivos de Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Archivo de notación musical abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "paquete de tipos de letra"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Servidor de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Grupo de trabajo de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Monitor del sistema de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Tema de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Proyecto de Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Archivo de Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Juego guardado de Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Campo de Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Archivo de documento de Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Figura de Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Figura de Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Figura de KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Figura de Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Documento de KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "documento de entrenador de vocabulario"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Archivo de KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Vocabulario de KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Volcado de análisis de rendimiento de Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Archivo del modelador UML Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Enlace de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Lista de descarga de KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Archivo de emoticonos de Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Contacto de ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Formato multimedia de Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Documento RDF de Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Imagen PIC de Softimage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Archivo de lenguaje de marcas de Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Opciones de configuración de KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Opciones de generación de código de KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Declaración de interfaz de usuario de KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Declaración de KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Informe de KCrash"
--- /dev/null
+# translation of kdelibs4.po to Estonian
+# Copyright (C) 1999-2004, 2005, 2006, 2009 Free Software Foundation, Inc.
+#
+# Hasso Tepper <hasso@kde.org>, 1999-2004, 2005, 2006.
+# Marek Laane <bald@smail.ee>, 2003-2009.
+# Peeter Russak <pezz@tkwcy.ee>, 2005.
+# Marek Laane <bald@smail.ee>, 2009, 2010, 2011, 2012, 2014, 2016, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2019-12-21 18:44+0200\n"
+"Last-Translator: Marek Laane <qiilaq69@gmail.com>\n"
+"Language-Team: Estonian <kde-et@lists.linux.ee>\n"
+"Language: et\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 19.08.1\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Sellele rakendusele pole litsentsitingimusi määratud.\n"
+"Täpsema info saamiseks vaata dokumentatsiooni või\n"
+"lähteteksti faile.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr ""
+"Seda rakendust levitatakse vastavalt %1 litsentsis toodud tingimustele."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU Üldine Avalik Litsents, versioon 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Vähem Üldine Avalik Litsents, versioon 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD litsents"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD litsents"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic litsents"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic litsents"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Avalik litsents"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU Üldine Avalik Litsents, versioon 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Vähem Üldine Avalik Litsents, versioon 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Vähem Üldine Avalik Litsents, versioon 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Kohandatud"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Pole määratud"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Tänu tõlkemeeskondade tööle üle kogu maailma on KDE tõlgitud paljudesse "
+"keeltesse.</p> <p>KDE tõlkimise kohta täpsema info saamiseks külasta "
+"lehekülge <a href=\"http://l10n.kde.org\">https://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Teabe näitamine autori kohta."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Litsentsi näitamine."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Rakenduse töölauafaili baasfailinimi."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "failinimi"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Selle rakenduse on kirjutanud keegi, kes soovib jääda anonüümseks."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 on kirjutanud:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Palun kasuta vigadest teatamiseks aadressi https://bugs.kde.org."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Palun kasuta vigadest teatamiseks aadressi %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Teek %1 ei paku KPluginFactory't."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m %2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m %2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1t %2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1t %2m %3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1t %2m %3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 päeva"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 tundi"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutit"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundit"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekund(it)"
+msgstr[1] "%n millisekund(it)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n päev(a)"
+msgstr[1] "%n päev(a)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n tund(i)"
+msgstr[1] "%n tund(i)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut(it)"
+msgstr[1] "%n minut(it)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekund(it)"
+msgstr[1] "%n sekund(it)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ja %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Vigane daatum"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Ülehomme"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Homme"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Täna"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Eile"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Üleeile"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minutit"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Asukohta %1 ei ole olemas"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "'lsof' käivitamine nurjus, veakood %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob ei ole Windowsis toetatud"
--- /dev/null
+# translation of xml_mimetypes.po to Estonian
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Marek Laane <bald@smail.ee>, 2009, 2010, 2011, 2016, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-01-18 11:03+0200\n"
+"Last-Translator: Marek Laane <qiilaq69@gmail.com>\n"
+"Language-Team: Estonian <kde-et@lists.linux.ee>\n"
+"Language: et\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 19.08.1\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF bittrasterfont"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java aplett"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML-i laiendi adapter"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE värviskeem"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuffi pakett"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWalleti turvalaegas"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugari aruandemall"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba teema"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plani projektihalduse dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plani töösuuna dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato projektihalduse dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato projektihalduse tööpakett"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugari arhiiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "veebiarhiiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML-skeem"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio plugina fail"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbumi import"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR pilt"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE toorpildivormingud"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® 16nd-objektfail"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate failinimekirja avaja plugin"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc notatsioonifail"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "fondipakett"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windowsi server"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windowsi töögrupp"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE süsteemi jälgija"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE teema"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta projekt"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommanderi fail"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolfi salvestatud mäng"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolfiväljak"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okulari dokumendiarhiiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri kujund"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo kujund"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo kujund"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kigi kujund"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSegi dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "sõnavara treenija dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPloti fail"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuizi sõnavara"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrindi profileerimistõmmis"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML-fail"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windowsi link-fail"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGeti allalaadimiste nimekiri"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete emotikoniarhiiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ kontakt"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF-dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC pilt"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt märkekeele fail"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+#, fuzzy
+#| msgid "KConfigXT Configuration Options"
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT seadistusvalikud"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+#, fuzzy
+#| msgid "KConfigXT Code Generation Options"
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT koodi genereerimise valikud"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+#, fuzzy
+#| msgid "KXMLGUI UI Declaration"
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI UI deklaratsioon"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+#, fuzzy
+#| msgid "KNotification Declaration"
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotificationi deklaratsioon"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+#, fuzzy
+#| msgid "KCrash Report"
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrashi aruanne"
--- /dev/null
+# Translation for kcoreaddons5_qt.po to Euskara/Basque (eu)
+# Copyright (C) 1999-2020, This file is copyright:
+# This file is distributed under the same license as the original file.
+# KDE Euskaratzeko proiektuko arduraduna <xalba@euskalnet.net>.
+#
+# Translators:
+# Marcos <marcos@euskalgnu.org>, 2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
+# Ion Gaztañaga <igaztanaga@gmail.com>, 2005.
+# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2009.
+# Iñigo Salvador Azurmendi <xalba@euskalnet.net>, 2010, 2011, 2012, 2013, 2014, 2017, 2018, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-12-01 21:26+0100\n"
+"Last-Translator: Iñigo Salvador Azurmendi <xalba@ni.eus>\n"
+"Language-Team: Basque <kde-i18n-eu@kde.org>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 20.08.3\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Programa honentzako ez da lizentzia baldintzarik zehaztu.\n"
+"Aztertu dokumentazioa edo iturburua lizentzia baldintza\n"
+"bila.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Programa hau %1 lizentziapean banatzen da."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+"GNU General Public License Version 2 - GNUren Lizentzia Publiko Orokorraren "
+"2. bertsioa"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+"GNU Lesser General Public License Version 2 - GNUren Lizentzia Publiko Ez "
+"hain Orokorraren 2. bertsioa"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD lizentzia"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD lizentzia"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License - Lizentzia Artistikoa"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License - Lizentzia Artistikoa"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License - Q lizentzia publikoa"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+"GNU General Public License Version 3 - GNUren Lizentzia Publiko Orokorraren "
+"3. bertsioa"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+"GNU Lesser General Public License Version 3 - GNUren Lizentzia Publiko Ez "
+"hain Orokorraren 3. bertsioa"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+"GNU Lesser General Public License Version 2.1 - GNUren Lizentzia Publiko Ez "
+"hain Orokorraren 2.1 bertsioa"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Pertsonalizatua"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Zehaztu gabe"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE hizkuntza askotara itzulita dago mundu osoko itzulpen-taldeen "
+"laguntzari esker.</p><p>KDEren nazioartekotzeari buruz gehiago jakiteko "
+"bisitatu <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p> <p>KDE "
+"Euskaratzeko proiektuaren inguruko informazioa eskuratuko duzu <a href="
+"\"https://l10n.kde.org/team-infos.php?teamcode=eu\">hemen</a>. Etorkizun "
+"hurbilean informazioa hobetzea gure asmoen artean dago.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Erakutsi egileari buruzko informazioa."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Erakutsi lizentziari buruzko informazioa."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Aplikazio honentzako mahaigain-sarreraren oinarri fitxategi-izena."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Fitxategi-izena"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Aplikazio hau bere burua anonimo gisa mantendu nahi duen batek idatzi zuen."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 honek idatzi zuen:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Erabili http://bugs.kde.org akatsen berri emateko."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Akatsen berri eman %1(e)ra."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 liburutegiak ez du KPluginFactory bat eskaintzen."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1 m %2,%3 s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1 m %2 s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1 h %2 m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1 h %2 m %3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1 h %2 m %3 s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 egun"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ordu"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutu"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segundo"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "milisegundo %n"
+msgstr[1] "%n milisegundo"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "egun %n"
+msgstr[1] "%n egun"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "ordu %n"
+msgstr[1] "%n ordu"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "minutu %n"
+msgstr[1] "%n minutu"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "segundo %n"
+msgstr[1] "%n segundo"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 eta %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data baliogabea"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Bi egun barru"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Bihar"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Gaur"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Atzo"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Duela bi egun"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Oraintxe"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "duela %1 minutu"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 bide-izena ez da existitzen"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Huts egin du `lsof' exekutatzea, errore kodea %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob ez da onartzen Windows-en"
--- /dev/null
+# Translation of xml_mimetypes5.po to Euskara/Basque (eu).
+# Copyright (C) 2009-2018, Free Software Foundation.
+# Copyright (C) 2019-2020, this file is copyright:
+# This file is distributed under the same license as the original file.
+# KDE euskaratzeko proiektuaren arduraduna <xalba@euskalnet.net>.
+#
+# Translators:
+# marcos <marcos@euskalgnu.org>, 2009.
+# Iñigo Salvador Azurmendi <xalba@euskalnet.net>, 2010, 2011, 2017, 2018, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-28 22:34+0100\n"
+"Last-Translator: Iñigo Salvador Azurmendi <xalba@ni.eus>\n"
+"Language-Team: Basque <kde-i18n-eu@kde.org>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 20.08.2\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Audio CDa"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF bit-mapa letra-tipoa"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java aplikaziotxoa"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML hedapen-egokitzailea"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE-ren kolore antolaera"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff-erako paketea"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet-eko zorroa"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar-rerako txosten-txantiloia"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoidea"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba-ko gaia"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan-eko proiektuak kudeatzeko dokumentua"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan-eko lanerako pakete-dokumentua"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato-ko proiektua kudeatzeko dokumentua"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato-ko proiektuak kudeatzeko lan paketea"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar-reko artxiboa"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "web-artxiboa"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML eskema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio plugin-fitxategia"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum inportatzea"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR irudia"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE-ren RAW irudi formatuak"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel®-en objektu hamaseitarreko fitxategia"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate-ko fitxategi-zerrenda zamatzeko plugin zerrenda"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc-ko musika-notazio fitxategia"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "letra-tipoen paketea"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows zerbitzaria"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows lantaldea"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE-ren sistemako begiralea"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE-ren gaia"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta-ko proiektua"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander-reko fitxategia"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf-en gordetako jokoa"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf zelaia"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular-reko dokumentu-artxiboa"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri-ko irudia"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Geo Dk. irudia"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo-ko irudia"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig-eko irudia"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg-eko dokumentua"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "hiztegi-trebatzaileko dokumentua"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot fitxategia"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz-eko hiztegia"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind profil iraulketa"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML Modelatzailerako fitxategia"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows-eko esteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet-en zama-jaisteko zerrenda"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete-ko aurpegiera-artxiboa"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ-ko kontaktua"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media formatua"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF dokumentua"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC irudia"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt markatzeko lengoaiako fitxategia"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT konfiguratzeko aukerak"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT kodea sortzeko aukerak"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI UI deklarazioa"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification-eko deklarazioa"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash-eko txostena"
--- /dev/null
+# translation of kdelibs4.po to Persian
+# Nazanin Kazemi <kazemi@itland.ir>, 2006, 2007.
+# Mahdi Foladgar <foladgar@itland.ir>, 2006.
+# Nasim Daniarzadeh <daniarzadeh@itland.ir>, 2006, 2007.
+# Tahereh Dadkhahfar <dadkhahfar@itland.ir>, 2006.
+# MaryamSadat Razavi <razavi@itland.ir>, 2007.
+# Nooshin Asiaie <asiaie@itland.ir>, 2007.
+# Mohamad Reza Mirdamadi <mohi@linuxshop.ir>, 2009, 2010, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-06-28 16:40+0430\n"
+"Last-Translator: Mohammad Reza Mirdamadi <mohi@linuxshop.ir>\n"
+"Language-Team: Farsi (Persian) <kde-i18n-fa@kde.org>\n"
+"Language: fa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"برای این برنامه، اصطلاحات مربوط به مجوز مشخص نشده است.\n"
+"لطفاً، برای هر اصطلاح مربوط به جواز،\n"
+"مستندات یا متن را بررسی کنید.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "این برنامه تحت اصطلاحات %1 توزیع میشود."
+
+# GPL
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+# GNU General Public License Version 2
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "مجوز عمومی GNU نسخهٔ ۲"
+
+# LGPL
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU مجوز کمتر عمومی گنو نسخه ۲"
+
+# BSD License
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "مجوز BSD"
+
+# BSD License
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "مجوز BSD"
+
+# Artistic License
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "مجوز Artistic"
+
+# Artistic License
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "مجوز Artistic"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL نسخه۱.۰"
+
+# Q Public License
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "مجوز عمومی Q"
+
+# GPL
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU مجوز عمومی گنو نسخه ۳"
+
+# LGPL
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU مجوز کمتر عمومی گنو نسخه ۳"
+
+# LGPL
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU مجوز کمتر عمومی گنو نسخه ۲"
+
+# Custom
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "سفارشی"
+
+# Not specified
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "نامعین"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>کیدیای به لطف همکاری تیمهای بومیسازی در تمام دنیا ترجمه و بومیسازی میشود."
+"</p><p>برای اطلاعات بیشتر در مورد بینالمللی سازی <a href=\"http://l10n.kde."
+"org\">http://l10n.kde.org</a> راببینید.</p><p> تیم فارسیسازی کیدیای هم همگام "
+"با دیگر تیمها و به صورت کاملا داوطلبانه به بومیسازی و ترجمه این محیط "
+"میپردازد. شما هم میتوانید به این تیم بپیوندید. صفحه رسمی تیم را ببینید: <a "
+"href=\"http://l10n.kde.org/team-infos.php?teamcode=fa\">http://l10n.kde.org/"
+"teaminfos.php?teamcode=fa</a></p><p> با وجود دقت زیاد در بررسی ترجمهها، آنها "
+"ممکن است با کمبودهایی همراه باشند. در صورت وجود اشکال در ترجمهها یا برای "
+"پیشنهادات و یا اطلاعات بیشتر با آدرس mohi@linuxshop.ir<email>mohi@linuxshop."
+"ir</email> تماس بگیرید.</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "نمایش اطلاعات نویسنده"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "نمایش اطلاعات مجوز"
+
+#: lib/kaboutdata.cpp:1217
+#, fuzzy
+#| msgid "Please choose language which should be used for this application:"
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "لطفاً زبانی را که باید برای این کاربردنامه استفاده شود را برگزینید:"
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "خطای نام پرونده"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "این کاربرد توسط فردی نوشته شده که خواسته ناشناس باقی بماند"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 توسط \n"
+"%2 نوشته شد"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "لطفاً، از http://bugs.kde.org برای گزارش اشکالها استفاده کنید.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "لطفاً، خطاها را به %1 گزارش کنید.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "کتابخانه %1 کارخانه همساز KDE 4 را ارائه نمیکند."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "قبل از ظهر"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "بعد از ظهر"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "قبل از ظهر"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "پنجشنبه"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "مه"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "تیر"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "ویرایش"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ارائه"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "قبل از ظهر"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+# %1 %2
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2، %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بایت"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 کیلو بایت"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 مگابایت"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 گیگابایت"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ترابایت"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بایت"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 کیلوبایت"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 مگابایت"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 گیگابایت"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ترابایت"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بایت"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "گیبیبایت"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 روز"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ساعت"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 دقیقه"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 ثانیه"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 میلیثانیه"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 روز"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ساعت"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 دقیقه"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 ثانیه"
+
+# %1 %2
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 و %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "نام پروندههای نامعتبر"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 روز"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "فردا"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "امروز"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "دیروز"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 دقیقه"
+
+# %1 %2
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1، %2."
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "پرونده %1 یافت نشد."
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Finnish messages for kdelibs4.
+# Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 This_file_is_part_of_KDE
+# This file is distributed under the same license as the kdelibs package.
+# Kim Enkovaara <kim.enkovaara@iki.fi>, 2002,2003, 2005, 2006, 2007.
+# Tapio Kautto <eleknader@phnet.fi>, 2003, 2004.
+# Mikko Ikola <kola@netikka.fi>, 2003.
+# Teemu Rytilahti <teemu.rytilahti@d5k.net>, 2003, 2008.
+# Mikko Ikola <ikola@iki.fi>, 2003.
+# Teemu Rytilahti <teemu.rytilahti@kde-fi.org>, 2003, 2004, 2008.
+# Niklas Laxström <niklas.laxstrom+kdetrans@gmail.com>, 2006, 2007.
+# Joonas Niilola <juippis@roskakori.org>, 2006.
+# Mikko Piippo <piippo@cc.helsinki.fi>, 2007.
+# Teemu Rytilahti <tpr@d5k.net>, 2008.
+# Tommi Nieminen <translator@legisign.org>, 2009, 2010, 2011, 2017, 2018, 2019, 2020, 2021.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2010.
+# Lasse Liehu <lasse.liehu@gmail.com>, 2006, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017.
+#
+# KDE Finnish translation sprint participants:
+# Author: Artnay
+# Author: Jl
+# Author: Lliehu
+# Author: Niklas Laxström
+# Author: Suhviksi
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-02-25 11:54+0200\n"
+"Last-Translator: Tommi Nieminen <translator@legisign.org>\n"
+"Language-Team: Finnish <kde-i18n-doc@kde.org>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 20.04.2\n"
+"X-POT-Import-Date: 2013-01-13 20:43:21+0000\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Ohjelmalle ei ole määritelty lisenssiä.\n"
+"Tarkista mahdolliset lisenssiehdot ohjeista tai lähdekoodista.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Tätä ohjelmaa levitetään %1 -lisenssin mukaisesti."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License (GPL), versio 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License (LGPL), versio 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-lisenssi"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic-lisenssi"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License (GPL), versio 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License (LGPL), versio 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License (LGPL), versio 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Oma"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ei määritelty"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Jos haluat ilmoittaa käännösvirheestä, ehdottaa parannusta tai osallistua "
+"suomentamiseen, katso suomennosryhmän sivut osoitteessa <a href=\"https://"
+"community.kde.org/KDE_Localization/fi\">community.kde.org/KDE_Localization/"
+"fi</a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Näytä tekijätiedot."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Näytä lisenssitiedot."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Tämän sovelluksen desktop-tietueen tiedostonimi."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "tiedostonimi"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Tekijä haluaa pysyä tuntemattomana."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "Tekijät – %1:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Ilmoita vioista osoitteessa https://bugs.kde.org."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Ilmoita vioista osoitteeseen %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Kirjasto %1 ei tarjoa KPluginFactoryä."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 t"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kt"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mt"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Gt"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Tt"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Pt"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Et"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zt"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yt"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 t"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 kt"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mt"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Gt"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Tt"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Pt"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Et"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zt"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yt"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1 min %2,%3 s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1 min %2 s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1 h %2 min"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1 h %2 min %3,%4 s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1 h %2 min %3 s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 päivää"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 tuntia"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuuttia"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekuntia"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekunti"
+msgstr[1] "%n millisekuntia"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n päivä"
+msgstr[1] "%n päivää"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n tunti"
+msgstr[1] "%n tuntia"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuutti"
+msgstr[1] "%n minuuttia"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunti"
+msgstr[1] "%n sekuntia"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Virheellinen päiväys"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Ylihuomenna"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Huomenna"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Tänään"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Eilen"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Toissapäivänä"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Juuri nyt"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minuuttia sitten"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Sijaintia %1 ei ole olemassa"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "lsof-komennon suoritus epäonnistui, virhekoodi %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob ei ole tuettu Windowsissa"
--- /dev/null
+# Finnish messages for xml_mimetypes.
+# Copyright © 2010 This_file_is_part_of_KDE
+# This file is distributed under the same license as the kdelibs package.
+# Tommi Nieminen <translator@legisign.org>, 2010, 2021.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2010.
+# Lasse Liehu <lliehu@kolumbus.fi>, 2010.
+# Lasse Liehu <lasse.liehu@gmail.com>, 2011, 2012, 2014, 2017.
+#
+# KDE Finnish translation sprint participants:
+# Author: Lliehu
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-02-25 11:54+0200\n"
+"Last-Translator: Tommi Nieminen <translator@legisign.org>\n"
+"Language-Team: Finnish <kde-i18n-doc@kde.org>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-POT-Import-Date: 2012-12-01 22:24:31+0000\n"
+"X-Generator: Lokalize 20.04.2\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD-ääni"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF-bittikarttafontti"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java-sovelma"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML-laajennussovitin"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE-värimalli"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff-paketti"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet-lompakko"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar-raporttipohja"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "sovelma"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba-teema"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan -projektinhallintatiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan -työpakettitiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPLato-projektinhallintatiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato-projektinhallinnan työpaketti"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar-arkisto"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "verkkoarkisto"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML -skeema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio-liitännäistiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum-tuonti"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR-kuva"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE-raakakuvamuoto"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intelin heksadesimaalinen objektitiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate-tiedostoluettelon latausliitännäisen luettelo"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc-musiikkinuottikirjoitustiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "fonttipaketti"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows-palvelin"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows-työryhmä"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE:n järjestelmänvalvonta"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE-teema"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta-projekti"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander-tiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "peruna"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Tallennettu Kolf-peli"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf-rata"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular-tiedostoarkisto"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri-kuvio"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo -kuvio"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo-kuvio"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig-kuvio"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg-tiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "sanavaraston koulutustiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot-tiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz-sanasto"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind-profiilivedos"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML Modeller -tiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows-linkki"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet-latausluettelo"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete-hymiöarkisto"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ-yhteystieto"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media -muoto"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF -tiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC -kuva"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt-merkintäkielitiedosto"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT-asetusvalinnat"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT-koodinluontivalinnat"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI-käyttöliittymäasettelu"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+#, fuzzy
+#| msgid "KNotification Declaration"
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification Declaration"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash-raportti"
--- /dev/null
+# translation of kdelibs4.po to Français
+# translation of kdelibs4.po to
+# Matthieu Robin <kde@macolu.org>, 2002,2003, 2004.
+# Robert Jacolin <rjacolin@ifrance.com>, 2003,2004.
+# Gilles Caulier <caulier.gilles@free.fr>, 2003.
+# Gérard Delafond <gerard@delafond.org>, 2003, 2004.
+# Matthieu Robin <kde@macolu.org>, 2004, 2005, 2006.
+# Cedric Pasteur <cedric.pasteur@free.fr>, 2004.
+# Nicolas Ternisien <nicolas.ternisien@gmail.com>, 2004, 2005, 2006, 2007, 2008.
+# Matthieu Robin <matthieu@macolu.org>, 2005.
+# Éric Bischoff <ebischoff@nerim.net>, 2005.
+# Sébastien Renard <Sebastien.Renard@digitalfox.org>, 2006, 2007, 2008.
+# Anne-Marie Mahfouf <annma@kde.org>, 2007, 2008, 2012.
+# Ludovic Grossard <grossard@kde.org>, 2008.
+# Mickael Sibelle <kimael@gmail.com>, 2008.
+# Nicolas Lécureuil <nlecureuil@mandriva.com>, 2010.
+# Joëlle Cornavin <jcorn@free.fr>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Sebastien Renard <renard@kde.org>, 2013, 2014.
+# Vincent Pinon <vpinon@kde.org>, 2016, 2017.
+# Simon Depiets <sdepiets@gmail.com>, 2017, 2018, 2019.
+# Xavier Besnard <xavier.besnard@neuf.fr>, 2020, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-01-21 14:01+0100\n"
+"Last-Translator: Xavier Besnard <xavier.besnard@neuf.fr>\n"
+"Language-Team: French <kde-francophone@kde.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 20.12.1\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Aucune licence n'a été spécifiée pour ce programme.\n"
+"Veuillez consulter la documentation ou le code source\n"
+"pour trouver les éventuels termes de la licence.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ce programme est distribué selon les termes de la %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Version 2 de la Licence Générale Publique GNU"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Version 2 de la Licence Générale Publique Limitée GNU"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licence BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licence BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licence Artistique"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licence Artistique"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licence Publique Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Version 3 de la Licence Générale Publique GNU"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Version 3 de la Licence Générale Publique Limitée GNU"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Version 2.1 de la Licence Générale Publique Limitée GNU"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personnalisé"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Non spécifié"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE est traduit dans de nombreuses langues grâce au travail des équipes "
+"d'internationalisation.</p><p>Pour plus d'informations sur "
+"l'internationalisation de KDE, consultez <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a>.</p><p>Le travail de l'équipe francophone est "
+"consultable sur <a href=\"https://fr.l10n.kde.org\">https://fr.l10n.kde.org</"
+"a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Afficher les informations sur l'auteur."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Afficher les informations sur la licence."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "La base du nom de fichier de l'entrée desktop pour cette application."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nom du fichier"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Cette application a été écrite par quelqu'un souhaitant rester anonyme."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 a été écrit par :"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Veuillez utiliser « https://bugs.kde.org » pour signaler des bogues."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Veuillez signaler les bogues à %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La bibliothèque %1 n'offre pas une KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 ko"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Po"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Eo"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zo"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yo"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 Ko"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Po"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Eo"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zo"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yo"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 Kio"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 Mio"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 Gio"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 Tio"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 Pio"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 Eio"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 Zio"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 Yio"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 jours"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 heures"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutes"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 secondes"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milliseconde"
+msgstr[1] "%n millisecondes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n jour"
+msgstr[1] "%n jours"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n heure"
+msgstr[1] "%n heures"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minute"
+msgstr[1] "%n minutes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n seconde"
+msgstr[1] "%n secondes"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 et %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Date non valable"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Dans deux jours"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Demain"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Aujourd'hui"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Hier"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Il y a deux jours"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "À l'instant"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "Il y a %1 minutes"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "L'emplacement %1 n'existe pas"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Impossible d'exécuter « lsof » : code d'erreur %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob n'est pas pris en charge sur Windows"
--- /dev/null
+# translation of xml_mimetypes.po to Français
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Geoffray Levasseur <jeff.brandin@gmail.com>, 2009.
+# Sebastien Renard <Sebastien.Renard@digitalfox.org>, 2009.
+# Geoffray Levasseur <geoffray.levasseurbrandin@numericable.fr>, 2010, 2011, 2013, 2014.
+# xavier <xavier.besnard@neuf.fr>, 2012, 2013, 2020.
+# Vincent Pinon <vpinon@kde.org>, 2017.
+# Simon Depiets <sdepiets@gmail.com>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-27 13:29+0100\n"
+"Last-Translator: Xavier Besnard <xavier.besnard@neuf.fr>\n"
+"Language-Team: French <kde-francophone@kde.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 20.08.2\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: \n"
+"X-Text-Markup: \n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Police « bitmap SNF »"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Applet Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adaptateur d'extension « KHTML »"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Schéma de couleurs de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Paquet pour KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Portefeuille pour KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Modèle de rapport pour Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "composant graphique"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Thème pour SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Document de gestion de projets pour Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Document de lots de travaux pour Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Document de gestion de projets pour KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Lots de travaux du logiciel de gestion de projets pour KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Archive pour Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "Archive Internet"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Schéma « XML W3C »"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Fichier de module externe « Real-Audio »"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Importation pour KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Image Haute définition « HDR »"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formats d'image « raw » pour KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Fichier objet hexadécimal « Intel® »"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr ""
+"Liste de modules externes pour le chargeur de liste de fichiers pour Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Fichier de notation musicale « ABC »"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "Paquet de fontes de caractères"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Serveur Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Groupe de travail Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Moniteur système pour KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Thème de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Projet pour Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Fichier pour Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "patate"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Partie enregistrée pour Kolf "
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Parcours pour Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Archive de documents pour Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Figure pour Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Figure pour « Dr. Geo »"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Figure pour KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Dessin pour Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Document pour KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "Document d'apprentissage du vocabulaire"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Fichier pour KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Vocabulaire pour KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Vidage de profil pour Cachegrind / Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Fichier de modélisation « UML » pour Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Lien pour Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Liste de téléchargements pour KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Archive d'émoticônes pour Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Contact « ICQ »"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Format « Microsoft Média »"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Document « RDF » pour Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Image « PIC » de Softimage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Fichier de langage à balises pour Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Options de configuration pour KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Options de génération de code pour KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Déclaration d'interface « KXMLGUI »"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Déclaration de KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Rapport de KCrash"
--- /dev/null
+# translation of kdelibs4.po to Nederlands
+# translation of kdelibs4.po to
+# KTranslator Generated File
+# Fryske oersetting fan kdelibs.
+# Copyright (C) 2000,2001,2002,2003 KDE e.v..
+# let op! het bestand bevat ter hoogte van string 2470
+# een gesplitste zinnen die mbv. %1 of %2 weer worden samengevoegd!!
+# Bauke Nicolai <mildaam@hotmail.com>, 2002.
+# KDE-oersetgroep Frysk <frysk@kde.nl>, 2000, 2001, 2002,2003.
+# Rinse de Vries <rinsedevries@kde.nl>, 2004, 2005, 2006, 2007.
+# Berend ytsma <berendy@bigfoot.com>, 2004.
+# Rinse de Vries <RinseDeVries@home.nl>, 2006, 2008.
+# Berend Ytsma <berendy@gmail.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-07-22 09:48+0100\n"
+"Last-Translator: Berend Ytsma <berendy@gmail.com>\n"
+"Language-Team: nl <kde-i18n-doc@lists.kde.org>\n"
+"Language: fy\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KAider 0.1\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Der binne gjin lisinsje betingsten foar dit programma.\n"
+"Kontrolearje de dokumentaasje of de boarne foar\n"
+"allikefolle hokker lisinsje betingsten.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dit programma is ferspraat ûnder de betingsten fan de %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Lisinsje"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Lisinsje"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic lisinsje"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic lisinsje"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public lisinsje"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Oanpast"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Net oantsjutte"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE is yn ferskate talen beskikber. Dat is te tankjen oan de ynset fan "
+"oersetteams dy' t rûnom op 'e wrâld aktyf binne.</p><p>Sjoch foar mear "
+"ynformaasje oer de Frysktalige KDE op http://www.kde.nl/frysk en foar "
+"algemiene ynformaasje oer de ynternasjonalisaasje fan KDE op http://l10n.kde."
+"org</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Skriuwersynformaasje sjen litte"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Lisinsje-ynformaasje sjen litte"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Dizze applikaasje is skreaun troch ien dy anonym winsk te bliuwen."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 is skreaun troch\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Brûk http://bugs.kde.org om brekkings (programmaflaters) te rapportearjen.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Rapportearje brekkings oan %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Dizze %1 bibleteek jout gjin KDE4-kompatible factory"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "E-post"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Bewurkje"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Yntsjinje"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dagen"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 oeren"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuten"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekonden"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 millisekonde"
+msgstr[1] "%1 millisekonde"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dagen"
+msgstr[1] "%1 dagen"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 oeren"
+msgstr[1] "%1 oeren"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minuten"
+msgstr[1] "%1 minuten"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekonden"
+msgstr[1] "%1 sekonden"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 en %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Unjildige item."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 dagen"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hjoed"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Juster"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minuten"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Triem %1 bestiet net."
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Irish
+# Translation of kdelibs4.po to Irish
+# Copyright (C) 1999,2003,2004 Free Software Foundation, Inc.
+# Sean V. Kelley <s_oceallaigh@yahoo.com>, 1999
+# Séamus Ó Ciardhuáin <seoc at iolfree.ie>, 2003,2004
+# Kevin Scannell <kscanne@gmail.com>, 2004-2009
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2004-12-14 09:11-0600\n"
+"Last-Translator: Kevin Scannell <kscanne@gmail.com>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"Language: ga\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n < 11 ? "
+"3 : 4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Níor tugadh coinníollacha ceadúnaithe don bhogearra seo.\n"
+"Féach sna lámhleabhair nó sna foinsí le haghaidh\n"
+"coinníollacha ceadúnaithe.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Cuirtear an bogearra seo ar fáil de réir coinníollacha an %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Ceadúnas BSD"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Ceadúnas BSD"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Ceadúnas \"Artistic\""
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Ceadúnas \"Artistic\""
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Ceadúnas Poiblí Q"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Ceadúnas Saincheaptha"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Gan sonrú"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Aistrítear KDE go teangacha éagsúla de bharr obair na bhfoirne "
+"aistriúcháin ar fud an domhain.</p> <p>Chun tuilleadh eolais faoi "
+"idirnáisiúnú KDE a fháil, téigh go <a href=\"http://l10n.kde.org\">http://"
+"l10n.kde.org/</a></p> "
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Taispeáin eolas faoin údar"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Taispeáin eolas faoin cheadúnas"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Vítneaimis"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Bhí an feidhmchlár seo scríofa ag duine gur mian leis a bheith anaithnid."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"Bhí %1 scríofa ag:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Bain úsáid as http://bugs.kde.org chun tuairiscí fabht a sheoladh.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Seol tuairiscí fabhtanna chuig %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Níl feidhm %2 sa leabharlann %1."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Ar Siúl"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "OK"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgid "Miss"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Iníon"
+
+#: lib/util/kformatprivate.cpp:111
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Eagar"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Seol"
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 lá"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 uair"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 nóiméad"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 soicind"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 mhilleasoicind"
+msgstr[1] "%1 mhilleasoicind"
+msgstr[2] "%1 mhilleasoicind"
+msgstr[3] "%1 mhilleasoicind"
+msgstr[4] "%1 mhilleasoicind"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 lá"
+msgstr[1] "%1 lá"
+msgstr[2] "%1 lá"
+msgstr[3] "%1 lá"
+msgstr[4] "%1 lá"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 uair"
+msgstr[1] "%1 uair"
+msgstr[2] "%1 uair"
+msgstr[3] "%1 uair"
+msgstr[4] "%1 uair"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 nóiméad"
+msgstr[1] "%1 nóiméad"
+msgstr[2] "%1 nóiméad"
+msgstr[3] "%1 nóiméad"
+msgstr[4] "%1 nóiméad"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 soicind"
+msgstr[1] "%1 soicind"
+msgstr[2] "%1 soicind"
+msgstr[3] "%1 soicind"
+msgstr[4] "%1 soicind"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 agus %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Mír neamhbhailí."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 lá"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Amárach"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Inniu"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Inné"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 nóiméad"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Níl comhad %1 ann"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Irish translation of xml_mimetypes
+# Copyright (C) 2009 This_file_is_part_of_KDE
+# This file is distributed under the same license as the xml_mimetypes package.
+# Kevin Scannell <kscanne@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2009-12-24 06:59-0500\n"
+"Last-Translator: Kevin Scannell <kscanne@gmail.com>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"Language: ga\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n < 11 ? "
+"3 : 4\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Fuaim dhlúthdhiosca"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Cló Giotánmhapach SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Feidhmchláirín Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Cuibheoir Eisínteacht KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Téama dathanna de chuid KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Pacáiste KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Sparán KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Teimpléad tuarascála Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmóid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Téama SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Cáipéis Bhainisteoireachta Tionscadail Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Cáipéis phacáiste oibre Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Cáipéis Bhainisteoireachta Tionscadail KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Pacáiste oibre bainisteoireachta tionscadail KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Cartlann Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "cartlann ghréasáin"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Scéimre XML W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Comhad breiseáin RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Iompórtáil KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Íomhá HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formáidí amha íomhánna de chuid KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Comhad oibiachta heicsidheachúlach Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Liosta de bhreiseáin luchtaithe liostaí comhad do Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Comhad nodaireachta ceoil abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "pacáiste clónna"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Freastalaí Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Grúpa oibre Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Monatóir an chórais KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Téama KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Tionscadal Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Comhad Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "práta"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Cluiche sábháilte Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Cúrsa Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Cartlann cáipéisí Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Léaráid Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Léaráid Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Léaráid KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Léaráid Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Cáipéis KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "cáipéis traenálaí stóir focal"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Comhad KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Stór Focal KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Próifíl dhumpáilte Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Samhaltóir UML Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Nasc Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Liosta íosluchtuithe KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Cartlann straoiseog Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Teagmháil ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Formáid Mheán Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Cáipéis RDF Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Íomhá PIC Softimage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Comhad Teanga Mharcála Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# GunChleoc <fios@foramnagaidhlig.net>, 2014, 2015, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2016-04-29 19:30+0100\n"
+"Last-Translator: GunChleoc <fios@foramnagaidhlig.net>\n"
+"Language-Team: Fòram na Gàidhlig\n"
+"Language: gd\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
+"(n > 2 && n < 20) ? 2 : 3;\n"
+"X-Generator: Virtaal 0.7.1\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Cha deach teirmichean ceadachais a shònrachadh airson a' phrògraim seo.\n"
+"Thoir sùil air an docamaideadh no air a' bhun-tùs airson\n"
+"teirmichean ceadachais sam bith.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Cha am prògram seo 'ga sgaoileadh fo theirmichean a' cheadachais %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License, tionndadh 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License, tionndadh 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License, tionndadh 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License, tionndadh 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License, tionndadh 2"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Gnàthaichte"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Gun sònrachadh"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Tha KDE 'ga eadar-theangachadh gu iomadh cànan taing dhan obair a nì "
+"sgiobaidhean eadar-theangachaidh air feadh an t-saoghail.</p><p>Airson "
+"barrachd fiosrachaidh mu eadar-theangachadh aig KDE, tadhail air <a href="
+"\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Seall fiosrachadh ùghdair."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Seall fiosrachadh a' cheadachais."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Ainm faidhle bunaiteach an innteirt desktop airson na h-aplacaid seo."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "ainm an fhaidhle"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Chaidh an aplacaid seo a sgrìobhadh le cuideigin nach eil airson ainm "
+"foillseachadh."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "Chaidh %1 a sgrìobhadh le:"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgctxt "KAboutData CLI|"
+#| msgid "Please use http://bugs.kde.org to report bugs."
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Cleachd http://bugs.kde.org gus aithris a dhèanamh air bugaichean."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Cuir aithrisean air bugaichean gu %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Chan eil KPluginFactory air an leabharlann %1."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 là(ithean)"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 uair(ean)"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 m(h)ionaid(ean)"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 d(h)iog(an)"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n mhille-dhiog"
+msgstr[1] "%n mhille-dhiog"
+msgstr[2] "%n mhille-dhiog"
+msgstr[3] "%n mhille-dhiog"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n latha"
+msgstr[1] "%n latha"
+msgstr[2] "%n latha"
+msgstr[3] "%n latha"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n uair"
+msgstr[1] "%n uair"
+msgstr[2] "%n uair"
+msgstr[3] "%n uair"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n mhionaid"
+msgstr[1] "%n mhionaid"
+msgstr[2] "%n mhionaid"
+msgstr[3] "%n mhionaid"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n diog"
+msgstr[1] "%n diog"
+msgstr[2] "%n diog"
+msgstr[3] "%n diog"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 agus %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n latha"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "A-màireach"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "An-diugh"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "An-dè"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 m(h)ionaid(ean)"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# GunChleoc <fios@foramnagaidhlig.net>, 2015.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2015-11-04 15:14+0000\n"
+"Last-Translator: Michael Bauer <fios@akerbeltz.org>\n"
+"Language-Team: Fòram na Gàidhlig\n"
+"Language: gd\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
+"(n > 2 && n < 20) ? 2 : 3;\n"
+"X-Generator: Poedit 1.8.4\n"
+"X-Project-Style: kde\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD fuaime"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "cruth-clò bitmap SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "aplaid Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "adaptar leudachain KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "sgeama dathan KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "pacaid KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "sporan KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "teamplaid aithisg Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "ùrlar SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "sgrìobhainn stiùireadh pròiseict Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "sgrìobhainn pacaid obrach Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "sgrìobhainn stiùireadh pròiseict KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "sgrìobhainn pacaid obrach KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "tasglann Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "tasglann-lìn"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "sgeama XML W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "faidhle plugan RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "ion-phortadh KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "dealbh HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "fòrmatan deilbh amh KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "faidhle oibseact sia-dheicheach Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "liosta de phlugan Kate a luchdaicheas liostaichean fhaidhlichean"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "faidhle nòtachadh ciùil abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "pacaid chruthan-clò"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "frithealaiche Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "buidheann-obrach Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "monatair siostaim KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "ùrlar KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "pròiseact Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "faidhle Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "buntàta"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "geama Kolf air a shàbhaladh"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "raon Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "tasglann sgrìobhainnean Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "figear Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "figear Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "figear KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "figear Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "sgrìobhainn KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "sgrìobhainn trèanair briathrachais"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "faidhle KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "briathrachas KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "dump pròifil Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "faidhle Umbrello UML Modeller"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "ceangal Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "liosta luchdaidhean a-nuas KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "tasglann shamhlaidhean-ghnùis Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "neach-aithne ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "sgrìobhainn Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "dealbh Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "faidhle Qt Markup Language"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to galician
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# mvillarino <mvillarino@users.sourceforge.net>, 2007, 2008, 2009.
+# Marce Villarino <mvillarino@kde-espana.es>, 2008, 2009.
+# marce villarino <mvillarino@users.sourceforge.net>, 2009.
+# marce villarino <mvillarino@gmail.com>, 2009.
+# Marce Villarino <mvillarino@kde-espana.es>, 2009, 2010, 2011, 2012.
+# Xosé <xosecalvo@gmail.com>, 2010.
+# Marce Villarino <mvillarino@kde-espana.es>, 2011, 2012, 2013, 2014.
+# Adrián Chaves Fernández <adriyetichaves@gmail.com>, 2015, 2016, 2017.
+# Adrián Chaves (Gallaecio) <adrian@chaves.io>, 2017, 2018, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2019-10-19 22:29+0200\n"
+"Last-Translator: Adrián Chaves (Gallaecio) <adrian@chaves.io>\n"
+"Language-Team: Galician <proxecto@trasno.gal>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 19.11.70\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Non se especificou a licenza deste programa.\n"
+"Comprobe a documentación ou o código fonte se a necesita.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Este programa distribúese baixo os termos da licenza %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licenza Pública Xeral de GNU, Versión 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licenza Pública Xeral Menor de GNU, Versión 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licenza BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licenza BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licenza artística"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licenza artística"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licenza pública Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licenza Pública Xeral de GNU, Versión 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licenza Pública Xeral Menor de GNU, Versión 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licenza Pública Xeral Menor de GNU, Versión 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizada"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Non especificada"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE está traducido a moitos idiomas grazas ao traballo dos equipos de "
+"tradución de todo o mundo.</p><p>Para máis información sobre a "
+"internacionalización de KDE visite <a href=\"https://l10n.kde.org\">https://"
+"l10n.kde.org</a> ou http://www.trasno.net/</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostrar información do autor."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostrar información da licenza."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "O nome de ficheiro base da entrada de escritorio da aplicación."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nome de ficheiro"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Esta aplicación foi escrita por alguén que quere quedar anónimo."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 foi escrito por:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Use https://bugs.kde.org para informar de fallos."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Informe dos fallos a %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "A biblioteca %1 non ofrece unha KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m %2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m %2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h %2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h %2m %3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h %2m %3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 días"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutos"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segundos"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisegundo"
+msgstr[1] "%n milisegundo"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n día"
+msgstr[1] "%n días"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n horas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minutos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segundo"
+msgstr[1] "%n segundos"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 e %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "A data é incorrecta."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n día"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Mañá"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hoxe"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Onte"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minutos"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "A ruta %1 non existe"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Non se puido executar «lsof», código de erro %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob non é compatíbel con Windows"
--- /dev/null
+# translation of xml_mimetypes.po to galician
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Marce Villarino <mvillarino@kde-espana.es>, 2009.
+# marce villarino <mvillarino@users.sourceforge.net>, 2009.
+# Marce Villarino <mvillarino@kde-espana.es>, 2009, 2010, 2011.
+# Marce Villarino <mvillarino@kde-espana.es>, 2011, 2012, 2014.
+# Adrián Chaves Fernández (Gallaecio) <adriyetichaves@gmail.com>, 2017.
+# Adrián Chaves (Gallaecio) <adrian@chaves.io>, 2018, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2019-11-17 09:53+0100\n"
+"Last-Translator: Adrián Chaves (Gallaecio) <adrian@chaves.io>\n"
+"Language-Team: Galician <proxecto@trasno.gal>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 20.03.70\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD de son"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Fonte de mapa de bits SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Miniaplicativo de Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adaptador de extensión de KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Esquema de cores de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Paquete de KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Carteira de KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Modelo de informe de Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoide"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Tema de SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Proxecto do Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Paquete de traballo do Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Proxecto de KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Paquete de traballo de KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Arquivo de Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "arquivo web"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Esquema XML do W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Ficheiro de complemento de RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Importación de KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Imaxe de HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formatos de imaxe raw de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Ficheiro de obxecto hexadecimal de Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Lista de complementos do cargador de lista de ficheiros de Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "ficheiro de notación musical abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "paquete de fontes"
+
+# skip-rule: PT-2010-window
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Servidor de Windows"
+
+# skip-rule: PT-2010-window
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Grupo de traballo de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Monitor do sistema de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Tema de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Proxecto de Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Ficheiro do Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Partida de Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Campo de Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Arquivo de documento de Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Figura de Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Figura de Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Figura de KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Figura de Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Documento de KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "documento de práctica de vocabulario"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Ficheiro de KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Vocabulario de KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Envorcado de perfil de Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Ficheiro de modelo UML de Umbrello"
+
+# skip-rule: PT-2010-window
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Ligazón de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Lista de descargas de KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Arquivo de emoticonas de Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Contacto do ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Formato de medios de Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Documento RDF de Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Imaxe PIC de Softimage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Ficheiro na linguaxe de etiquetas de Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+#, fuzzy
+#| msgid "KConfigXT Configuration Options"
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Opcións de configuración de KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+#, fuzzy
+#| msgid "KConfigXT Code Generation Options"
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Opcións de xeración de código de KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+#, fuzzy
+#| msgid "KXMLGUI UI Declaration"
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Declaración de interface gráfica de KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+#, fuzzy
+#| msgid "KNotification Declaration"
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Declaración de KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Gujarati
+# Copyright (C) 2008 This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Kartik Mistry <kartik.mistry@gmail.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-11-22 00:01+0530\n"
+"Last-Translator: Kartik Mistry <kartik.mistry@gmail.com>\n"
+"Language-Team: Gujarati <team@utkarsh.org>\n"
+"Language: gu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"આ કાર્યક્રમ માટે કોઈ લાઈસન્સીંગ શરતો સ્પષ્ટ થયેલ નથી.\n"
+"કોઈપણ લાઈસન્સીંગ શરતો માટે મહેરબાની કરી દસ્તાવેજો અથવા\n"
+"સ્રોતની ચકાસણી કરો.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "આ કાર્યક્રમ %1 ની શરતો હેઠળ વિતરિત થયેલ છે."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v૨"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU જનરલ પબ્લિક લાઈસન્સ આવૃત્તિ ૨"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v૨"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU લેસર જનરલ પબ્લિક લાઈસન્સ આવૃત્તિ ૨"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD લાઈસન્સ"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD લાઈસન્સ"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "આર્ટિસ્ટિક લાઈસન્સ"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "આર્ટિસ્ટિક લાઈસન્સ"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v૧.૦"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q પબ્લિક લાઈસન્સ"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v૩"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU જનરલ પબ્લિક લાઈસન્સ આવૃત્તિ ૩"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v૩"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU લેસર જનરલ પબ્લિક લાઈસન્સ આવૃત્તિ ૩"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v૨"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU લેસર જનરલ પબ્લિક લાઈસન્સ આવૃત્તિ ૨"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "પોતાનું"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "સ્પષ્ટ થયેલ નથી"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE ઘણી બધી ભાષાઓમાં ભાષાંતરિત થયેલ છે જે સમગ્ર વિશ્વની ભાષાંતર ટીમોને આભારી છે.</"
+"p><p>વધુ માહિતી માટે KDE આંતરરાષ્ટ્રિયકરણની મુલાકાત લો <a href=\"http://l10n.kde."
+"org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "લેખક જાણકારી બતાવો"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "લાઈસન્સ જાણકારી બતાવો"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "આ કાર્યક્રમ કોઈક દ્વારા લખાયેલ છે કે જેને ગુમનામ રહેવું છે."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 લખાયું છે આમનાં દ્વારા\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "મહેરબાની કરી ક્ષતિઓનો અહેવાલ આપવા માટે http://bugs.kde.org નો ઉપયોગ કરો.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "મહેરબાની કરી ક્ષતિઓનો અહેવાલ %1 પર આપો.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "લાઇબ્રેરી %1 KDE ૪ સુસંગતતા ફેક્ટરી આપતી નથી."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "સવાર"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "સાંજ"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "સવાર"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "કિઆ"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "મિય"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "તિર"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "તિ"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "ફેરફાર"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "રજુ કરો"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "સવાર"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 બાઈટ"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 કેબી"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 એમબી"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 જીબી"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ટીબી"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 પીબી"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ઈબી"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ઝીબી"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 વાયબી"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 બાઈટ"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 કેબી"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 એમબી"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 જીબી"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ટીબી"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 પીબી"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ઈબી"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ઝીબી"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 વાયબી"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 બાઈટ"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 કેબી"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 એમબી"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 જીબી"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ટીબી"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 પીબી"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ઈબી"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ઝીબી"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 વાયબી"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 દિવસો"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 કલાકો"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 મિનિટો"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 સેકંડો"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 મિલિસેકન્ડ"
+msgstr[1] "%1 મિલિસેકન્ડ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 દિવસો"
+msgstr[1] "%1 દિવસો"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 કલાકો"
+msgstr[1] "%1 કલાકો"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 મિનિટો"
+msgstr[1] "%1 મિનિટો"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 સેકંડો"
+msgstr[1] "%1 સેકંડો"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 અને %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "અયોગ્ય કેલેન્ડર પ્રકાર"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 દિવસો"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "આજે"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ગઇકાલે"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 મિનિટો"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "ફાઇલ %1 અસ્તિત્વમાં નથી."
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Hausa translation for kdelibs strings.
+# Copyright 2009 Adriaan de Groot, Mustapha Abubakar, Ibrahim Dasuna
+# This file is distributed under the same license as the kdelibs package.
+#
+# Adriaan de Groot <groot@kde.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-03-17 11:22+0100\n"
+"Last-Translator: Adriaan de Groot <groot@kde.org>\n"
+"Language-Team: Hausa <kde-i18n-doc@lists.kde.org>\n"
+"Language: ha\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 0.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr ""
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr ""
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr ""
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid ""
+#| "Please use <a href=\"http://bugs.kde.org\">http://bugs.kde.org</a> to "
+#| "report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Yi amfani da <a href=\"http://bugs.kde.org\">http://bugs.kde.org</a> domin "
+"sanar da matsaloli.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to <a href=\"mailto:%1\">%2</a>.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Sanar da matsaloli ga <a href=\"mailto:%1\">%2</a>.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "safe"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "yamma"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "safe"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "safe"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr ""
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr ""
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr ""
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr ""
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Yau"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Jiya"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to hebrew
+# Translation of kdelibs4.po to Hebrew
+# translation of kdelibs4.po to
+# KDE Hebrew Localization Project
+#
+# In addition to the copyright owners of the program
+# which this translation accompanies, this translation is
+# Copyright (C) 1998 Erez Nir <erez-n@actcom.co.il>
+# Copyright (C) 1999-2003 Meni Livne <livne@kde.org>
+#
+# This translation is subject to the same Open Source
+# license as the program which it accompanies.
+#
+# Diego Iastrubni <elcuco@kde.org>, 2003.
+# Diego Iastrubni <elcuco@kde.org>, 2003, 2004.
+# Diego Iastrubni <elcuco@kde.org>, 2005, 2006, 2007, 2008, 2009, 2012, 2014.
+# Meni Livne <livne@kde.org>, 2007.
+# tahmar1900 <tahmar1900@gmail.com>, 2008, 2009.
+# Elkana Bardugo <ttv200@gmail.com>, 2017. #zanata
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2017-05-16 06:49-0400\n"
+"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
+"Language-Team: Hebrew <kde-i18n-doc@kde.org>\n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Zanata 3.9.6\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"לא צוינו תנאי רישיון כלשהם לתוכנית זו.\n"
+"בדוק אם ישנם תנאי רישיון כלשהם\n"
+"בתיעוד או בקוד המקור.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "תוכנית זו מופצת תחת התנאים של %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "מותאם־אישית"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "לא צוין"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p> סביבת שולחן העבודה KDE תורגמה לשפות רבות הודות למאמציהם של צוותי תרגום "
+"מכל רחבי העולם. </p> <p> למידע נוסף על עברית ב־KDE, בקר באתר של KDE ישראל "
+"בכתובת <a href=\"http://kde.org.il\">http://kde.org.il</a>.</p><p> למידע "
+"כללי על בנאום KDE, בקר באתר <a href=\"http://i10n.kde.org\">http://i10n.kde."
+"org</a></p >"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "הצג מידע על הכותב"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "הצג מידע אודות הרישיון"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "התוכנית נכתבה על ידי מישהו שמעוניין להישאר בעילום שם."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 נכתב על ידי\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "אנא השתמש ב־http://bugs.kde.org כדי לדווח על באגים.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "דווח על באגים אל: %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "הספרייה %1 לא מספקת מפעל תואם KDE 4."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ב'"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 ק\"ב"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 מ\"ב"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ג\"ב"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ט\"ב"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 פ\"ב"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 א\"ב"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ז\"ב"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 י\"ב"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ב'"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 ק\"ב"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 מ\"ב"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ג\"ב"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ט\"ב"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 פ\"ב"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 א\"ב"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ז\"ב"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 י\"ב"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ב'"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 ק\"ב"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 מ\"ב"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ג\"ב"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ט\"ב"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 פ\"ב"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 א\"ב"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ז\"ב"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 י\"ב"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ימים"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 שעות"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 דקות"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 שניות"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 אלפית שנייה"
+msgstr[1] "%1 אלפית שנייה"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 ימים"
+msgstr[1] "%1 ימים"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 שעות"
+msgstr[1] "%1 שעות"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 דקות"
+msgstr[1] "%1 דקות"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 שניות"
+msgstr[1] "%1 שניות"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ו־%2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "פריט שגוי."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 ימים"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "מחר"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "היום"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "אתמול"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 דקות"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Hindi
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Ravishankar Shrivastava <raviratlami@yahoo.com>, 2007.
+# Ravishankar Shrivastava <raviratlami@aol.in>, 2008.
+# G Karunakar <karunakar@indlinux.org>, 2009, 2010, 2012.
+# Raghavendra Kamath <raghu@raghukamath.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-07-10 10:57+0530\n"
+"Last-Translator: Raghavendra Kamath <raghu@raghukamath.com>\n"
+"Language-Team: kde-hindi\n"
+"Language: hi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Lokalize 21.04.3\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"इस प्रोग्राम के लिए कोई लाइसेंसिंग शर्तें उल्लेखित नहीं हैं.\n"
+"कृपया किसी भी लाइसेंसिंग शर्तों के लिए\n"
+"दस्तावेज़ या स्रोत देखें.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "यह अनुप्रयोग %1 शर्तों के अधीन वितरित किया गया है."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "जीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण २"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "एलजीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करण २"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "क्यूपीएल सं.१.०"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "क्यू पब्लिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "जीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण ३"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "एलजीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण ३"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "एलजीपीएल सं.२.१"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करण २.१"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "तदनुकूल"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "उल्लेखित नहीं"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>दुनिया भर के अनुवादक दलों के कृतज्ञता पूर्ण कार्य के कारण केडीई कई भाषाओं में अनुवादित है "
+"है।</p><p>केडीई के अंतर्राष्ट्रीयकरण के बारे में और अधिक जानकारी के लिए यहाँ जाएँ: <a href="
+"\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "लेखक की जानकारी दिखाएँ"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "लाइसेंस की जानकारी दिखाएँ"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "इस अनुप्रयोग के लिए डेस्कटॉप प्रविष्टि का आधार फ़ाइल नाम।"
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "फ़ाइल का नाम"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "इस अनुप्रयोग को किसी ऐसे व्यक्ति द्वारा लिखा गया है जो बेनाम बने रहना चाहते हैं।"
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 के लेखक :"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "कृपया http://bugs.kde.org का उपयोग बग रिपोर्ट के लिए करें।"
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "कृपया बग रिपोर्ट %1 को भेजें।"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "लाइब्रेरी %1 केप्लगइन फ़ैक्टरी प्रदान नहीं करती।"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "बिट"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "मि."
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "हर्त्ज"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 दिन"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 घंटे"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 मिनट"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 सेकंड"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n मिली-सेकंड"
+msgstr[1] "%n मिली-सेकंड"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n दिन"
+msgstr[1] "%n दिन"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n घंटा"
+msgstr[1] "%n घंटे"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n मिनट"
+msgstr[1] "%n मिनट"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n सेकंड"
+msgstr[1] "%n सेकंड"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 और %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "अवैध तारीख़"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "दो दिनों में"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "कल"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "आज"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "कल"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "दो दिन पहले"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "अभी"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 मिनट पहले"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "फ़ाइल पथ %1 मौज़ूद नहीं है"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "नि्पादित करने में विफल `lsof' त्रुटि कोड %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob विंडोज़ पर समर्थित नहीं है"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Raghavendra Kamath <raghu@raghukamath.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-06-29 20:38+0530\n"
+"Last-Translator: Raghavendra Kamath <raghu@raghukamath.com>\n"
+"Language-Team: kde-hindi\n"
+"Language: hi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Lokalize 21.04.2\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "रिलॅक्स एनजी"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "सीडी ऑडियो"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "एस एन एफ बिटमैप फोंट"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "जावा ऐपलेट"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "केएचटीएमएल विस्तारण अडैप्टर"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "केडीई रंग योजना"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "के-न्यूस्टफ पैकेज"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "के-वॉलेट बटुआ"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "कूगर रिपोर्ट टेम्पलेट"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "प्लास्मोइड"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "सूपरकरंबा स्वरूपण"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "कैलिग्रा प्लान परियोजना प्रबंधन दस्तावेज़ "
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "कॉलिग्रा प्लान कार्य पैकेज दस्तावेज़ "
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "के-प्लॅटो परियोजना प्रबंधन दस्तावेज़"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "के-प्लॅटो परियोजना प्रबंधन कार्य पैकेज"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "कूगर अभिलेखागार"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "वेब अभिलेखागार"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "डब्ल्यू त्री सी एक्स एम एल स्कीमा"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "रिअल-ऑडियो प्लगइन फ़ाइल"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "केफोटोआलबम आयात"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "एचडीआर छवि"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "केडीई रॉ छवि प्रारूप"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "इंटेल® षोडश आधारी ऑब्जैक्ट फ़ाइल"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "केट फ़ाइल सूची लोडर प्लगइन सूची"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "एबीसी संगीत संकेतन फ़ाइल "
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "फोंट पैकेज"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "विंडोज़ सरवर"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "विंडोज़ वर्कग्रुप"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "केडीई तंत्र मॉनीटर"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "केडीई स्वरूपण"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "क्वांटा परियोजना"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "कमांडर फ़ाइल"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "आलू का खेल"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "कोल्फ का सहेजा गया खेल"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "कोल्फ कोर्स"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "ऑकुलर दस्तावेज़ अभिलेखागार"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "केबरी आकृति"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "डॉ. जिओ आकृति"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "के-जिओ आकृति"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "केआइजी आकृति"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "के-सेग दस्तावेज़"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "शब्दावली प्रशिक्षक दस्तावेज़"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "के-एम-प्लॉट फ़ाइल"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "के-वर्ड-क्विज शब्दावली"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "कैशे/कॉलग्राइंड प्रोफ़ाइल डंप"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr " उंब्रेल्लो यूएमएल मोडलर फ़ाइल"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "विंडोज़ लिंक"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "के-गेट डाउनलोड सूची"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "कोपिट इमोटिकॉन्स अभिलेखागार"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "आइ सी क्यू सम्पर्क"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "माइक्रोसॉफ़्ट मीडिया प्रारूप"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "टर्टल आरडीएफ दस्तावेज़"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "सॉफ्टइमेज पीआइसी छवि"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "क्यूट मार्कअप लैंग्वेज फ़ाइल"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "के-कोंफिग-एक्सटी विन्यास विकल्प"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "के-कोंफिग-एक्सटी कोड उत्पादन विकल्प"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "के-एक्सएमएल-जीयूआइ घोषणापत्र"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "के-नोटिफिकेशन घोषणापत्र"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "के-क्रॅश रिपोर्ट"
--- /dev/null
+# translation of kdelibs4.po to Hindi
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Ravishankar Shrivastava <raviratlami@yahoo.com>, 2007.
+# Ravishankar Shrivastava <raviratlami@aol.in>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-02-10 20:44+0530\n"
+"Last-Translator: Ravishankar Shrivastava <raviratlami@aol.in>\n"
+"Language-Team: Hindi <kde-i18n-doc@lists.kde.org>\n"
+"Language: hne\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Lokalize 0.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ये प्रोग्राम बर कोनो लाइसेंस के सर्त निरधारित नइ हे.\n"
+"किरपा करके, लाइसेंस सर्त मन बर\n"
+"कागद या स्रोत देखव.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ये प्रोग्राम %1 सर्त के अधीन वितरित कर दे गे हे."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "जीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करन २"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "एलजीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करन २"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "क्यूपीएल सं.1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "क्यू पब्लिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "जीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करन ३"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "एलजीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करन ३"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "एलजीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करन २"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "मनमाफिक"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "निरधारित नइ"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>केडीई बहुत अकन भाखा मं अनुवाद करे गे हे. एखर बर विस्व भर के अनुवादक मन के टोली मन ल "
+"हार्दिक धन्यवाद.</p><p>केडीई के अंतररास्ट्रीयकरन परिचय अउ अधिक जानकारी बर इहां जाव: "
+"<a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "लेखक के जानकारी देखाव"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "लाइसेंस के जानकारी देखाव"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "फाइल नाम गलती"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ये अनुपरयोग ल कोनो अइसन मनखे ह लिखे हे जऊन ह बेनाम बने रहना चाहथे."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ल \n"
+"%2 के साथ लिखे गिस"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "किरपा करके, http://bugs.kde.org के उपयोग बग रिपोट बर करव.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "किरपा करके, बग रपट %1 ल भेजव.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "लाइब्रेरी %1 केडीई ४ कम्पेटिबल फैक्टरी प्रदान नइ करे."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "बिहिनियाँ"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "मंझनियाँ"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "बिहिनियाँ"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "खम"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "मई"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "तिर"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "संपादन"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "जमा करव"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "बिहिनियाँ"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 बा."
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 बा."
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 मे.बा."
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 गी.बा."
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 टे.बा."
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 बा."
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 बा."
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 बा."
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 बा."
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 बा."
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 कि.बा."
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 मे.बा."
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 गी.बा."
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 टे.बा."
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 बा."
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 बा."
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 बा."
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 बा."
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 बा."
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 कि.बा."
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 मे.बा."
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 गी.बा."
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 टे.बा."
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 टे.बा."
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 टे.बा."
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 टे.बा."
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 टे.बा."
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 दिन"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 घंटा"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 मिनट"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 सेकन्ड"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 मिलिस-सेकन्ड्स"
+msgstr[1] "%1 मिलिस-सेकन्ड्स"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 दिन"
+msgstr[1] "%1 दिन"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 घंटा"
+msgstr[1] "%1 घंटा"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 मिनट"
+msgstr[1] "%1 मिनट"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 सेकन्ड"
+msgstr[1] "%1 सेकन्ड"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 अउ %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "अवैध फाइल नाम"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 दिन"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "आज"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "कल"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 मिनट"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "फाइल %1 मौजूद नइ हे"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Translation of kdelibs4 to Croatian
+#
+# Renato Pavicic <renato@translator-shop.org>, 2006.
+# Zarko Pintar <zarko.pintar@gmail.com>, 2009.
+# Marko Dimjasevic <marko@dimjasevic.net>, 2009, 2010, 2011.
+# Andrej Dundović <adundovi@gmail.com>, 2009, 2010.
+# DoDo <DoDoEntertainment@gmail.com>, 2009.
+# Andrej Dundovic <andrej@dundovic.com.hr>, 2009, 2010, 2011.
+# Marko Dimjašević <marko@dimjasevic.net>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2011-08-18 04:06+0200\n"
+"PO-Revision-Date: 2011-07-22 16:08+0200\n"
+"Last-Translator: Marko Dimjašević <marko@dimjasevic.net>\n"
+"Language-Team: Croatian <kde-croatia-list@lists.sourceforge.net>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 1.2\n"
+"X-Poedit-Language: Croatian\n"
+"X-Poedit-Country: CROATIA\n"
+"X-Poedit-Bookmarks: 1601,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Za ovaj program nema odredbi uvjeta licenciranja.\n"
+"Za uvjete licenciranja provjerite dokumentaciju ili\n"
+"izvorni kod.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ovaj program se distribuira pod uvjetima %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Licenca"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Licenca"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic licenca"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic licenca"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Javna Licenca"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Prilagođeno"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nije određeno"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE je preveden na više jezika zahvaljujući radu prevoditeljskih timova u "
+"cijelom svijetu.</p><p>Za više informacija o internacionalizaciji KDE-a "
+"posjetite <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Prikaži podatke o autoru"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Prikaži podatke o licenci"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ovu aplikaciju je napisao netko tko želi ostati anoniman."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 je napisao:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Nedostatke prijavite na adresi http://bugs.kde.org\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Nedostatke prijavite na adresi %1\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka %1 ne nudi KDE 4 kompatibilnu radionicu."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Pošta"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Thai"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Uredi"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Pošalji"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dana"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 sata"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuta"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekunda"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 millisekunda"
+msgstr[1] "%1 millisekunda"
+msgstr[2] "%1 millisekunda"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dana"
+msgstr[1] "%1 dana"
+msgstr[2] "%1 dana"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 sata"
+msgstr[1] "%1 sata"
+msgstr[2] "%1 sata"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minuta"
+msgstr[1] "%1 minuta"
+msgstr[2] "%1 minuta"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekunda"
+msgstr[1] "%1 sekunda"
+msgstr[2] "%1 sekunda"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Neispravna stavka."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 dana"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Sutra"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Danas"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Jučer"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minuta"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Datoteka %1 nije pronađena"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Translation of xml_mimetypes to Croatian
+#
+# Zarko Pintar <zarko.pintar@gmail.com>, 2009.
+# Andrej Dundovic <adundovi@gmail.com>, 2010.
+# Marko Dimjašević <marko@dimjasevic.net>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2011-07-22 16:17+0200\n"
+"Last-Translator: Marko Dimjašević <marko@dimjasevic.net>\n"
+"Language-Team: Croatian <kde-croatia-list@lists.sourceforge.net>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.2\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: \n"
+"X-Text-Markup: \n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF bitmap pismo"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java applet"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML adapter proširenja"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE-ova paleta boja"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff paket"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet lisnica"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar predložak izvještaja"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "tema za SuperKarambu"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan, dokument za upravljanje projektom"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan, dokument za radni paket"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato dokument upravljanja projektom"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato radni paket upravljanja projektom"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar arhiva"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "web arhiva"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML shema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "priključna datoteka za RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum uvoz"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR slika"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE-ovi sirovi slikovni podaci"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intelova® heksadecimalna objektna datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate lista od priključka učitavača liste datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc muzičko notacijska datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "paket pisama"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows poslužitelj"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows radna grupa"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE-ov monitor sustava"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE-ova tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta projekt"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf spremljena igra"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf staza"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "arhiva dokumenta za Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri figura"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo figura"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo skica"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig figura"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "dokument vokabularskog trenera"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz vokabular"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind odbačeni profil"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML Modeller datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows veza"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet lista preuzimanja"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete arhiva emotikona"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ kontakt"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC slika"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Datoteka Qt-ovog označnog jezika"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Upper Sorbian
+# translation of kdelibs4.po to
+# Copyright (C) 2003,2004, 2005, 2007 Free Software Foundation, Inc.
+# Eduard Werner <e.werner@rz.uni-leipzig.de>, 2003.
+# Prof. Dr. Eduard Werner <e.werner@rz.uni-leipzig.de>, 2003,2004.
+# Eduard Werner <edi.werner@gmx.de>, 2005.
+# Eduard Werner/Edward Wornar <edi.werner@gmx.de>, 2007, 2008.
+# Bianka Šwejdźic <hertn@gmx.de>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-12-19 22:49+0100\n"
+"Last-Translator: Eduard Werner <edi.werner@gmx.de>\n"
+"Language-Team: en_US <kde-i18n-doc@lists.kde.org>\n"
+"Language: hsb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
+"%100==4 ? 2 : 3;\n"
+"X-Generator: KAider 0.1\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Za tutón program nimam žane licensowe wuměnjenja.\n"
+"Prošu přepruwuj dokumentaciju abo žórło licensowych\n"
+" wuměnjenjow dla.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Program so dale dawa pod wuměnjenjemi w %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Licensa"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Licensa"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Konfigurowane"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Njepostajene "
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE so dźakowano přełožowanskich skupin po cyłym swěće do wjele rěčow "
+"přełožuje. </p><p>Wjace informacije namakaće na <a href=\"http://l10n.kde.org"
+"\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Pokaž informaciju wo awtorje"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Pokaž informaciju wo licensy"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Tuta aplikacija bu napisana wot čłowjeka, kiž chce anonymny wostać."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 bu napisane wot\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Prošu wužiwaj http://bugs.kde.org, zo by wo zmylku rozprawił.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prošu zdźělće zmylki tu: '%1'.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka '%1' njeposkića factory, kiž je z KDE 4 kompatibelny."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "rano"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "popołdnju"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "rano"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "mej"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Wobdźěłać"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Wotpósłać"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "rano"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1%2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dnjow"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hodźin"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 mjeńšin"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundow"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisekundow"
+msgstr[1] "%1 milisekundow"
+msgstr[2] "%1 milisekundow"
+msgstr[3] "%1 milisekundow"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dnjow"
+msgstr[1] "%1 dnjow"
+msgstr[2] "%1 dnjow"
+msgstr[3] "%1 dnjow"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 hodźin"
+msgstr[1] "%1 hodźin"
+msgstr[2] "%1 hodźin"
+msgstr[3] "%1 hodźin"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 mjeńšin"
+msgstr[1] "%1 mjeńšin"
+msgstr[2] "%1 mjeńšin"
+msgstr[3] "%1 mjeńšin"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekundow"
+msgstr[1] "%1 sekundow"
+msgstr[2] "%1 sekundow"
+msgstr[3] "%1 sekundow"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 a %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Njeznata protyka"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 dnjow"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "dźensa"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "wčera"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 mjeńšin"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1%2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Dataja %1 njeeksistuje"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Kiszel Kristóf <ulysses@kubuntu.org>, 2010.
+# Kristóf Kiszel <ulysses@kubuntu.org>, 2010, 2011, 2012, 2014.
+# Balázs Úr <urbalazs@gmail.com>, 2012, 2013.
+# Kristof Kiszel <kiszel.kristof@gmail.com>, 2018, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: KDE 4.4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-11-19 13:40+0100\n"
+"Last-Translator: Kristóf Kiszel <kiszel.kristof@gmail.com>\n"
+"Language-Team: Hungarian <kde-l10n-hu@kde.org>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 21.03.70\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Ennek a programnak a licencfeltételei nincsenek meghatározva.\n"
+"Nézze meg a program dokumentációját és forráskódját a licencelési\n"
+"feltételekért.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ez a program a(z) %1 jogi feltételeinek megfelelően használható."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License 2-es verzió"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License 2-es verzió"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD licenc"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD licenc"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Művészi licenc"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Művészi licenc"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q nyilvános licenc"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License 3-as verzió"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License 3-as verzió"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License 2.1-es verzió"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Egyedi"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nincs megadva"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>A KDE grafikus környezet számos nyelven használható. A projektben "
+"közreműködő magyar fordítók munkájának köszönhetően a KDE teljes egészében "
+"le van fordítva magyarra.</p><p>A KDE magyar fordításáról és az alkalmazások "
+"lokalizációjáról további információ található itt: <a href=\"https://l10n."
+"kde.org\">https://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "A szerző(k) nevének megjelenítése."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "A licencinformáció megjelenítése."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Az alkamazás asztali bejegyzésének fájlneve."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "fájlnév"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Az alkalmazás szerzője nem kívánta feltüntetni a nevét."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "A(z) %1 készítőinek névsora:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Kérjük, hogy a talált hibákat jelentse be a https://bugs.kde.org címen."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Kérjük, hogy a talált hibákat jelentse be itt: %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "A(z) %1 programkönyvtár nem tartalmaz KPluginFactoryt."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 nap"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 óra"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 perc"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 másodperc"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n ezredmásodperc"
+msgstr[1] "%n ezredmásodperc"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n nap"
+msgstr[1] "%n nap"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n óra"
+msgstr[1] "%n óra"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n perc"
+msgstr[1] "%n perc"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n másodperc"
+msgstr[1] "%n másodperc"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 és %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Érvénytelen dátum"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Két napon belül"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Holnap"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Ma"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Tegnap"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Két nappal ezelőtt"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Épp most"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 perccel ezelőtt"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "A(z) %1 elérési út nem létezik"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Az „lsof” végrehajtása meghiúsult, hibakód: %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "A KListOpenFilesJob nem támogatott Windowson"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Tamas Szanto <tszanto@interware.hu>, 2009.
+# Kristóf Kiszel <ulysses@kubuntu.org>, 2010, 2011, 2014.
+# Kristof Kiszel <kiszel.kristof@gmail.com>, 2018, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: KDE 4.3\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-11-16 12:30+0100\n"
+"Last-Translator: Kristóf Kiszel <kiszel.kristof@gmail.com>\n"
+"Language-Team: Hungarian <kde-l10n-hu@kde.org>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 21.03.70\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD-hang"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF-betűtípus"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java-kisalkalmazás"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML-es kiterjesztéskezelő"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE-színséma"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff-csomag"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet-jelszófájl"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar-jelentéssablon"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba-téma"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan projektkezelő dokumentum"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan munkacsomag dokumentum"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato projektkezelő dokumentum"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato projektkezelő munkacsomag"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar-archívum"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "webes archívum"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML-séma"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio-bővítményfájl"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum-import"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR-kép"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE-s nyers képformátumok"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel®-féle hexadecimális objektumfájl"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate-listafájl (fájllista vagy bővítménylista)"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Abc-kottafájl"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "betűtípuscsomag"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows-kiszolgáló"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows munkacsoport"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE rendszermonitor"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE téma"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta-projekt"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander-fájl"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf mentett állás"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf-pálya"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular-archívum"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri-alakzat"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo-alakzat"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo-alakzat"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig-alakzat"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg-dokumentum"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "szógyűjtemény"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot-fájl"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz-szótár"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind-képfájl"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML-fájl"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows-link"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet letöltési lista"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete-emotikoncsomag"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ-névjegy"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft-médiafájl"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF-dokumentum"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC-kép"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt Markup Language fájl"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT konfigurációs beállítások"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT kódgenerálási beállítások"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI UI deklaráció"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification deklaráció"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash jelentés"
--- /dev/null
+# KDE - kdelibs/kdelibs4.po Armenian translation.
+# Copyright (C) 2005, KDE Armenian translation team.
+#
+# Davit Nikoghosyan <nikdavnik@mail.ru>, 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2013-01-31 01:08+0400\n"
+"Last-Translator: Davit <nikdavnik@mail.ru>\n"
+"Language-Team: Armenian Language: hy\n"
+"Language: hy\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Տվյալ ծրագրի լիցենզիան չի նշված։\n"
+"Հնարավոր է այն նշված է փասթաթղթերում կամ ծրագրի նախնական նիշքերում։\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ծրագիրը տարածվում է ըստ պայմանների %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License, վերսիա 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License, վերսիա 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Լիցենզիա BSD"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Լիցենզիա BSD"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License, версия 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License, версия 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License, վերսիա 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Այլ լիցենզիա"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Լիցենզիան նշված չէ"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE թարգմանվել է մի շարք լեզուներով տարբեր երկրներում աշխատող մի շարք "
+"թարգմանող խմբերի շնորհիվ։</p><p>KDE թարգմանության մասին լրացուցիչ ինֆորմացիա "
+"ստանալու համար այցելեք <a href=\"http://l10n.kde.org\">l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Տալ տեղեկություն հեղինակի մասին"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Տալ տեղեկություն լիցենզիայի մասին"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ծրագրի հեղինակը ցանկացել է մնալ անհայտ։"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 գրել են:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Օգտագործեք http://bugs.kde.org սխալների մասին տեղեկացնելու համար։\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Օգտագործեք %1 սխալների մասին տեղեկացնելու համար։\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+"%1 գրադարանը չի տրամադրում տարրերի ստեղծման մեխանիզմ, որը համապատասխանում է "
+"KDE 4։"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "хам"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Май"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тир"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ճշտում"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Ուղարկել"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Բ"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 ԿԲ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 ՄԲ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ԳԲ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ՏԲ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ՊԲ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ԵԲ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ԶԲ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ԻԲ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Բ"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 ԿԲ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 ՄԲ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ԳԲ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ՏԲ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ՊԲ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ԵԲ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ԶԲ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ԻԲ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Բ"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 ԿիԲ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 ՄիԲ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ԳիԲ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ՏիԲ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ՊիԲ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ԵիԲ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ԶիԲ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ԻիԲ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 օրեր"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ժամեր"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 րոպեներ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 վարկյաններ"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 միլիվարկյան"
+msgstr[1] "%1 միլիվարկյան"
+msgstr[2] "%1 միլիվարկյան"
+msgstr[3] "%1 միլիվարկյան"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 օրեր"
+msgstr[1] "%1 օրեր"
+msgstr[2] "%1 օրեր"
+msgstr[3] "%1 օրեր"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ժամեր"
+msgstr[1] "%1 ժամեր"
+msgstr[2] "%1 ժամեր"
+msgstr[3] "%1 ժամեր"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 րոպեներ"
+msgstr[1] "%1 րոպեներ"
+msgstr[2] "%1 րոպեներ"
+msgstr[3] "%1 րոպեներ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 վարկյաններ"
+msgstr[1] "%1 վարկյաններ"
+msgstr[2] "%1 վարկյաններ"
+msgstr[3] "%1 վարկյաններ"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 և %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Չհամապատասխանող տարր։"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 օրեր"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Վաղը"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Այսօր"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Երեկ"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 րոպեներ"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 նիշքը գոյություն չունի"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# g.sora <g.sora@tiscali.it>, 2010, 2011, 2012, 2013, 2014, 2017, 2019, 2020, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-08-03 22:44+0200\n"
+"Last-Translator: giovanni <g.sora@tiscali.it>\n"
+"Language-Team: Interlingua <kde-i18n-doc@kde.org>\n"
+"Language: ia\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 21.04.3\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Le terminos de licentia pro iste programma non ha essite specificate.\n"
+"Pro favor tu controla la documentation o le fonte per omne\n"
+"le terminos de licentia.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Iste programma es distribuite sub le termino del%1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licentia GNU General Public Version 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licentia GNU Lesser General Public Version 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licentia BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licentia BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License (Licentia Artistic)"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License (Licentia Artistic)"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License (Public Licentia Q)"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licentia GNU General Public Version 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licentia GNU Lesser General Public Version 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licentia GNU Lesser General Public Version 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalisate"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Non specificate"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE es traducite in multe linguas gratias al labor del equipas de "
+"traduction de tote le mundo.</p><p> Pro informationes additional super le "
+"internationalisation de KDE tu visita <a href=\"http://l10n.kde.org\">http://"
+"l10.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Monstra information del autor"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Monstra information del licentia"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"Le nomine del file basic del ingresso de scriptorio per iste application."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nomine de file"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Iste application esseva scribite per alicuno que vole remaner anonymo"
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 esseva scribite per:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Pro favor tu usa http://bugs.kde.org per reportar bugs."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Pro favor tu reporta bugs a %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Le bibliotheca %1 non offere un KPluginFactory"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h %2m "
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m %3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dies"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 secundas"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisecunda(s)"
+msgstr[1] "%n millisecunda(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n die(s)"
+msgstr[1] "%n die(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora(s)"
+msgstr[1] "%n hora(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuta(s)"
+msgstr[1] "%n minuta(s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n secunda(s)"
+msgstr[1] "%n secunda(s)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 e %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data invalide"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n die(s)"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Deman"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hodie"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Heri"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Due dies ante"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Solmente nunc"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minutas ante"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Le percurso %1 non existe"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Falleva exequer 'lsof' codice de error %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob non es supportate sur Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# g.sora <g.sora@tiscali.it>, 2010, 2011, 2014, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-11-12 21:48+0100\n"
+"Last-Translator: Giovanni Sora <g.sora@tiscali.it>\n"
+"Language-Team: Interlingua <kde-i18n-doc@kde.org>\n"
+"Language: ia\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Audio CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "font de bitmap SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Applet Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adaptator pro KHTML Extension"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Schema de color KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Pacchetto de KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Kwallet :portafolio"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar : patrono de reporto"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Thema de SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan: Documento de gestion de projecto"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Documento de pacchetto de labor de Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato: Documento de gestion de projecto"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato: Pacchetto de travalio de gestion de projecto"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar : archivo"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "archivo web"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "schema XML de W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "File de plugin de RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Importation de KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Imagine HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formatos de imagines crude de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "File objecto hexadecimal de Intel(c)"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate: Lista de plugin de cargator de lista de file"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "file de notation musical abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "pacchettos de fonts"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Servitor de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Gruppo de travalio de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Monitor de Systema de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Thema de KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta : Projecto"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander : file"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "patata"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Joco salveguardate de Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf : curso"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular : archivo de documento"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri : Figura"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr.Geo : Figura"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo : Figura"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig : figura"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg :documento"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "documento de instructor de vocabulario"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot: file"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Vocabulario de KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind : Discargatorio de profilo"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello: file Modellator UML"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Ligamine de Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet : Lista de discargar"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Archivo de emoticones de Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ : Contacto"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Formato de Media de Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "documento RDF de Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Imagine PIC de SoftImage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Le de linguage de marcation de QT"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT Optiones de Configuration"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT Optiones de Generation de Codice"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI UI Declaration"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification Declaration"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash Reporto"
--- /dev/null
+# Indonesian translations for kdelibs4 package.
+# Copyright (C) 2010 This_file_is_part_of_KDE
+# This file is distributed under the same license as the kdelibs4 package.
+# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010-2014.
+# Wantoyo <wantoyek@gmail.com>, 2017, 2018, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2019-12-25 08:18+0700\n"
+"Last-Translator: Wantoyo <wantoyek@gmail.com>\n"
+"Language-Team: Indonesian <kde-i18n-doc@kde.org>\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 19.12.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Tak ada perjanjian lisensi yang telah ditentukan untuk program ini.\n"
+"Silakan cek dokumentasi atau sumber untuk perjanjian\n"
+"lisensi apapun.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Program ini didistribusikan di bawah perjanjian %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Lisensi Publik Umum GNU Versi 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Lisensi Publik Umum Lebih Kecil Versi 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Lisensi BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Lisensi BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Lisensi Artistik"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Lisensi Artistik"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Lisensi Publik Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Versi 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Versi 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Versi 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Kustom"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Enggak ditentukan"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE diterjemahkan ke dalam banyak bahasa berkat usaha dari tim penerjemah "
+"dari seluruh dunia.</p><p>Untuk informasi selebihnya tentang "
+"internasionalisasi KDE silakan kunjungi <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Tampilkan informasi penulis."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Tampilkan informasi lisensi."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Nama file dasar dari seluruh desktop untuk aplikasi ini."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nama file "
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Aplikasi ini ditulis oleh seseorang yang ingin tetap menjadi anonim."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 ditulis oleh:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Silakan gunakan https://bugs.kde.org untuk melaporkan bug."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Silakan laporkan bug ke %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Pustaka %1 tidak menawarkan KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3d"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2d"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2d"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1j%2m%3.%4d"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1j%2m%3d"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 hari"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 jam"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 menit"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 detik"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milidetik"
+msgstr[1] "%n milidetik"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n hari"
+msgstr[1] "%n hari"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n jam"
+msgstr[1] "%n jam"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n menit"
+msgstr[1] "%n menit"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n detik"
+msgstr[1] "%n detik"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 dan %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Tanggal tidak absah"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Dalam dua hari"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Besok"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hari Ini"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Kemarin"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Dua hari yang lalu"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 menit"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Alur %1 tidak ada"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Gagal mengeksekusi `lsof' kode error %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob tidaklah didukung di Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Wantoyo <wantoyek@gmail.com>, 2018, 2019, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-02-24 20:09+0700\n"
+"Last-Translator: Wantoyo <wantoyek@gmail.com>\n"
+"Language-Team: Indonesian <kde-i18n-doc@kde.org>\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 19.12.1\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Audio CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Fon bitmap SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Applet Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adaptor Ekstensi KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Skema warna KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Paket KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Wallet KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Template laporan Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Tema SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Dokumen pengelolaan projek Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Dokumen pemaketan kerja Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Dokumen pengelolaan projek KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Paket kerja pengelolaan projek KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Arsip Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "arsip web"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Skema XML W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "File Plugin RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Impor KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Citra HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Format citra raw KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "File objek heksadesimal Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Daftar file Kate pemuat daftar plugin"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "File notasi musikal abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "Paket fon"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Server Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Workgroup Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Pemantau Sistem KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Tema KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Proyek Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "File kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Simpanan permainan Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Haluan Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Arsip dokumen Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Sosok Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Sosok Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Sosok KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Sosok Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Dokumen KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "dokumen pelatih kosakata"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "File KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Kosakata KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Gardu profil Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "File Umbrello UML Modeller"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Tautan Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Daftar unduhan KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Arsip emosikon Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Kontak ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Format Media Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Dokumen Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Citra Softimage PIC "
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "File Language Markup Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+#, fuzzy
+#| msgid "KConfigXT Configuration Options"
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Opsi Konfigurasi KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+#, fuzzy
+#| msgid "KConfigXT Code Generation Options"
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Opsi Penghasilan Kode KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+#, fuzzy
+#| msgid "KXMLGUI UI Declaration"
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Deklarasi KXMLGUI UI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+#, fuzzy
+#| msgid "KNotification Declaration"
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Deklarasi KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+#, fuzzy
+#| msgid "KCrash Report"
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Laporan KCrash"
--- /dev/null
+# translation of kdelibs4.po to Icelandic
+# íslensk þýðing á kdelibs4.po
+# Copyright (C) 1998,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+#
+# Logi Ragnarsson <logi@logi.org>, 1998-2003.
+# Richard Allen <ra@ra.is>, 1998-2004.
+# Pjetur G. Hjaltason <pjetur@pjetur.net>, 2003.
+# Arnar Leósson <leosson@frisurf.no>, 2003, 2005.
+# Sveinn í Felli <sveinki@nett.is>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2018-01-04 15:49+0000\n"
+"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
+"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
+"Language: is\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Ekki er búið að skilgreina notkunarleyfi fyrir þetta forrit.\n"
+"Vinsamlegast athugaðu frumkóðann eða leiðbeiningarnar með því\n"
+"til að finna höfundarréttarupplýsingar.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Þessu forriti er dreift skv. skilmálum %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public notkunarskilmálar útgáfa 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public notkunarskilmálar útgáfa 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD notkunarskilmálar"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD notkunarskilmálar"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Listrænir notkunarskilmálar (Artistic)"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Listrænir notkunarskilmálar (Artistic)"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL útgáfa 1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q almennir skilmálar (QPL)"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public notkunarskilmálar útgáfa 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public notkunarskilmálar útgáfa 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public notkunarskilmálar útgáfa 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Sérsniðið"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ekki skilgreint"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p> KDE er þýtt á mörg tungumál þökk sé vinnu þýðingahópa um allan heim, þar "
+"á meðal á Íslandi. </p><p> Frekari upplýsingar um þýðingar á KDE er að finna "
+"á <a href=\"https://l10n.kde.org\">https://l10n.kde.org</a> og sérstaklega "
+"um íslenskunina á <a href=\"https://www.is.kde.org/\">www.is.kde.org/</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Birta upplýsingar um höfund."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Birta upplýsingar um notkunarleyfi"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Grunn-skráarheiti skjáborðsfærslu fyrir þetta forrit."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "skráarheiti"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Þetta forrit var skrifað af einhverjum sem óskar nafnleyndar."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 var skrifað af:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Endilega notaðu https://bugs.kde.org til að senda inn villuskýrslur."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Endilega tilkynntu um villur til %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Aðgerðasafnið %1 býður ekki upp á KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "f.h."
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "e.h."
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "f.h."
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "f.h."
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Póstur"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tælenskt"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "e"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "e"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Sýsl"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Senda"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "f.h."
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1min%2.%3sek"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1min%2sek"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1klst%2min"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1klst%2min%3.%4sek"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1klst%2min%3sek"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dagar"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 klukkustundir"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 mínútur"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekúndur"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekúnda"
+msgstr[1] "%n millisekúndur"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dagur"
+msgstr[1] "%n dagar"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n klukkustund"
+msgstr[1] "%n klukkustundir"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n mínúta"
+msgstr[1] "%n mínútur"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekúnda"
+msgstr[1] "%n sekúndur"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 og %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ógild dagsetning"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n dagur"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Á morgun"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Í dag"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Í gær"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 mínútur"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Skráin %1 fannst ekki"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of xml_mimetypes.po to Icelandic
+# Copyright (C) 2009 This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Sveinn í Felli <sveinki@nett.is>, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2011-06-24 13:46+0000\n"
+"Last-Translator: Sveinn í Felli <sveinki@nett.is>\n"
+"Language-Team: Icelandic <kde-isl@molar.is>\n"
+"Language: is\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: Plural-Forms: nplurals=2; plural=n != 1;\n"
+"\n"
+"\n"
+"\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD hljóð"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF bitamyndaletur"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java forritlingur"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Aðlögun KHTML-endinga"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE litastef"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff pakki"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet veski"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar skýrslugerðarforsnið"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmíð"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba þema"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan verkstjórnunarskjal"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan verkpakkaskjal"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato verkstjórnunarskjal"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato verkstjórnunar vinnupakki"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar safnskrá"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "vefsafnskrá"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML skema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio plugin skrá"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum innflutningur"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR mynd"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE RAW myndsnið"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® hexadesimal hlutaskrá"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate skráahleðsluíforritalisti"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc nótnaskriftarskrá"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "leturpakki"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows miðlari"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows vinnuhópur"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE kerfiseftirlit"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE þema"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta verkefni"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander skrá"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "Kartafla (potato)"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Vistaður Kolf leikur"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf braut"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular skjalasafnskrá"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri teikning"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo teikning"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo teikning"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig teikning"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg skjal"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "orðaforðaþjálfunarskjal"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot skrá"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz orðaforði"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind sniðdump"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML Modeller skrá"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows tengill"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet niðurhalslisti"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete tjáningartáknasafn"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ tengiliður"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF skjal"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC mynd"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt Markup tungumálsskrá"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Italian
+# Andrea Rizzi <rizzi@kde.org>, 2003, 2004, 2005.
+# Federico Cozzi <federicocozzi@federicocozzi.it>, 2004.
+# Federico Zenith <federico.zenith@member.fsf.org>, 2004, 2008, 2009, 2010, 2011.
+# Andrea Rizzi <Andrea.Rizzi@sns.it>, 2004.
+# Nicola Ruggero <nixprog.adsl@tiscali.it>, 2005, 2006.
+# Nicola Ruggero <nicola@nxnt.org>, 2006, 2007, 2010.
+# Luciano Montanaro <mikelima@cirulla.net>, 2007.
+# Dario Panico <Dareus_Persarumrex@fastwebnet.it>, 2008.
+# Pino Toscano <toscano.pino@tiscali.it>, 2008.
+# Federico Zenith <federico.zenith@member.fsf.org>, 2008, 2012, 2013, 2014, 2015.
+# Innocenzo Ventre <innocenzo.ventre@gmail.com>, 2012.
+# Vincenzo Reale <smart2128vr@gmail.com>, 2014, 2017, 2018, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-11-18 10:29+0100\n"
+"Last-Translator: Vincenzo Reale <smart2128@baslug.org>\n"
+"Language-Team: Italian <kde-i18n-it@kde.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 20.08.3\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nessun tipo di licenza è stato specificato per questo programma.\n"
+"Controllare la documentazione o il codice sorgente per qualsiasi tipo di \n"
+"licenza.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Questo programma è distribuito nei termini della licenza %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licenza Pubblica Generica GNU, versione 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licenza Pubblica Generica Attenuata GNU, versione 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licenza BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licenza BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licenza Artistica"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licenza Artistica"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licenza Pubblica Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licenza Pubblica Generica GNU, versione 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licenza Pubblica Generica Attenuata GNU, versione 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licenza Pubblica Generica Attenuata GNU, versione 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizzata"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Non specificata"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE è tradotto in molte lingue grazie al lavoro dei vari gruppi di "
+"traduzione situati in tutto il mondo.</p><p>Per ulteriori informazioni sulla "
+"internazionalizzazione di KDE, visita il sito <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostra le informazioni sull'autore."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostra le informazioni sulla licenza."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Il nome file della voce del desktop per questa applicazione."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nome file"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Questa applicazione è stata scritta da qualcuno che vuole rimanere anonimo."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 è stato scritto da:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Usa https://bugs.kde.org per segnalare gli errori."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Segnala gli errori a %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "La libreria %1 non offre un KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 giorni"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ore"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuti"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 secondi"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisecondo"
+msgstr[1] "%n millisecondi"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n giorno"
+msgstr[1] "%n giorni"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n ora"
+msgstr[1] "%n ore"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minuti"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n secondo"
+msgstr[1] "%n secondi"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 e %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data non valida"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Tra due giorni"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Domani"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Oggi"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ieri"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Due giorni fa"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "In questo momento"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minuti fa"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Il percorso %1 non esiste"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Esecuzione di «lsof» non riuscita, codice di errore %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob non è supportato su Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Federico Zenith <federico.zenith@member.fsf.org>, 2009, 2010, 2011, 2014.
+# Vincenzo Reale <smart2128vr@gmail.com>, 2017, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-26 14:14+0100\n"
+"Last-Translator: Vincenzo Reale <smart2128@baslug.org>\n"
+"Language-Team: Italian <kde-i18n-it@kde.org>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 20.08.2\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Audio CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Carattere bitmap SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Applet Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adattatore di estensioni di KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Schema di colori di KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Pacchetto di KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Portafogli KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Modello di rapporto di Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoide"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Tema di SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Documento di gestione dei progetti di Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Documento dei pacchetti di lavoro di Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Documento di gestione dei progetti di KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Pacchetto di lavoro di gestione dei progetti di KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Archivio di Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "Archivio web"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Schema XML W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "File di estensioni RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Importazione di KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Immagine HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formati di immagine raw di KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "File oggetto esadecimale Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Elenco delle estensioni del caricatore di elenchi di file di Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "File di notazione musicale abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "Pacchetto di caratteri"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Server Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Gruppo di lavoro di Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Monitor di sistema di KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Tema di KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Progetto Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "File di Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "patata"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Partita salvata di Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Campo di Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Archivio di documenti di Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Figura di Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Figura di Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Figura di KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Figura di Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Documento di KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "Documento di allenamento a vocabolario"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "File di KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Vocabolario di KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Dump di profilatura di Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "File del modellatore UML Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Collegamento di Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Elenco di scaricamenti di KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Archivio di faccine di Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Contatto ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Formato multimediale di Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Documento Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Immagine Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "File di linguaggio di contrassegno di Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Opzioni di configurazione KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Opzioni di generazione codice KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Dichiarazione UI KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Dichiarazione KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Rapporto di KCrash"
--- /dev/null
+# Translation of kdelibs4 into Japanese.
+# This file is distributed under the same license as the kdelibs package.
+# Taiki Komoda <kom@kde.gr.jp>, 2002, 2004, 2006, 2010.
+# Noboru Sinohara <shinobo@leo.bekkoame.ne.jp>, 2004.
+# Toyohiro Asukai <toyohiro@ksmplus.com>, 2004.
+# Kurose Shushi <md81@bird.email.ne.jp>, 2004.
+# AWASHIRO Ikuya <ikuya@oooug.jp>, 2004.
+# Shinichi Tsunoda <tsuno@ngy.1st.ne.jp>, 2005.
+# Yukiko Bando <ybando@k6.dion.ne.jp>, 2006, 2007, 2008, 2009, 2010.
+# Tomohiro Hyakutake <tomhioo@outlook.jp>, 2019.
+# Fumiaki Okushi <fumiaki.okushi@gmail.com>, 2006, 2007, 2008, 2010, 2011, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2019-05-11 16:53-0700\n"
+"Last-Translator: Fumiaki Okushi <fumiaki.okushi@gmail.com>\n"
+"Language-Team: Japanese <kde-jp@kde.org>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Generator: Lokalize 19.04.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"このプログラムのライセンスについては、\n"
+"ドキュメントまたはソースを確認してください。\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "このプログラムは %1 のもとで配布されています。"
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD License"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "カスタム"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "指定なし"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<html><p>KDE は世界中の翻訳チームの手によってさまざまな言語に翻訳されていま"
+"す。</p><p>KDE の国際化対応の詳細については <a href=\"http://l10n.kde.org"
+"\">http://l10n.kde.org</a> をご覧ください。</p></html>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "著作者情報"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "ライセンス情報を表示"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "ファイル名"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "このアプリケーションは匿名でありたい誰かによって書かれました。"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"<application>%1</application> の作者:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "バグは http://bugs.kde.org へ報告してください。"
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "バグは %1 へ報告してください。"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "ライブラリ %1 には KDE 4 互換のファクトリ機能はありません。"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 日"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 時間"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 分"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 秒"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n ミリ秒"
+msgstr[1] "%n ミリ秒"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n 日"
+msgstr[1] "%n 日"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n 時間"
+msgstr[1] "%n 時間"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n 分"
+msgstr[1] "%n 分"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n 秒"
+msgstr[1] "%n 秒"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n 日"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "明日"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "今日"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "昨日"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 分"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1、%2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Taiki Komoda <kom@kde.gr.jp>, 2010.
+# Fumiaki Okushi <okushi@kde.gr.jp>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2011-04-24 13:18-0700\n"
+"Last-Translator: Fumiaki Okushi <okushi@kde.gr.jp>\n"
+"Language-Team: Japanese <kde-jp@kde.org>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+"X-Generator: Lokalize 1.1\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD オーディオ"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF ビットマップフォント"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java アプレット"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML エクステンションアダプタ"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE 色スキーム"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff パッケージ"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet ウォレット"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar レポートテンプレート"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba テーマ"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan プロジェクト管理文書"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan プロジェクト管理文書"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato プロジェクト管理文書"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato プロジェクト管理作業パッケージ"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar アーカイブ"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "ウェブアーカイブ"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML スキーマ"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio プラグインファイル"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum インポート"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR イメージ"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE raw イメージ形式"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® 十六進オブジェクトファイル"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate ファイルリストローダプラグインリスト"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc ミュージカルノーテーションファイル"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "フォントパッケージ"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows サーバ"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows ワークグループ"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE システムモニタ"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE テーマ"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta プロジェクト"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander ファイル"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf 保存されたゲーム"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf コース"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular 文書アーカイブ"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg 文書"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "ボキャブラリトレーナー文書"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot ファイル"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz ボキャブラリ"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind プロファイルダンプ"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML モデラーファイル"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows リンク"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet ダウンロードリスト"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete 感情アイコンアーカイブ"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ コンタクト"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft メディアフォーマット"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF 文書"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC 画像"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# KDE3 - Georgian translation of kdelibs4.po
+# Gia Shervashidze <giasher@telenet.ge>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-12-17 02:11+0400\n"
+"Last-Translator: George Machitidze <giomac@gmail.com>\n"
+"Language-Team: Georgian <http://www.gia.ge>\n"
+"Language: ka\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"მოცემულ პროგრამაში ლიცენზია არ მითითებულა.\n"
+"გთხოვთ გადაამოწმოთ პირველწყარო შესაძლო\n"
+"სალიცენზიო პირობეის შესახებ.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "პროგრამა ვრცელდება %1 სალიცენზიო პირობებით."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "ლიცენზია:"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "ლიცენზია:"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "საზოგადო კოდი"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "საზოგადო კოდი"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "საზოგადო კოდი"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "&შერჩევით"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "მომწოდებელი არ შერჩეულა."
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE მრავალ ენაზეა ნათარგმნი მთელი მსოფლიოს სხვადასხვა მთარგმნელთა "
+"ჯგუფების მიერ.</p><p>დამატებითი ინფორმაციისთვის KDE ინტერნაციონალიზაციის "
+"შესახებ ეწვიეთ http://i18n.kde.org</p><p>ქართული თარგმანის შესახებ "
+"ინფორმაცია შეგიძლიათ მიიღოთ პორტალზე http://www.gia.ge</p><p>იქვე გაიცნობთ "
+"გუნდს, რომელმაც KDE ქართულად თარგმნა და თუ მოისურვებთ, თავად შეძლებთ "
+"მონაწილეობის მიღებას.</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "ავტორის შესახებ ინფორმაციის ჩვენება"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "კიცენზიის შესახებ ინფორმაციის ჩვენება"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "ფაილის შეცდომა"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "პროგრამის ავტორმა ანონიმად დარჩენა მოისურვა."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 - ავტორ(ებ)ი:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "გთხოვთ გამოიყენოთ http://bugs.kde.org შეცდომების შეტყობინებისთვის.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "გამოიყენეთ %1 შეცდომების შეტყობინებისთვის.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 ბიბლიოთეკა %2 ფუნქციას არ გთავაზობთ."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "დიახ"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "ხამ"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "მაი"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "თირ"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "რედაქტირება"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "გაგზავნა"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1, %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1, %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1, %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1, %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1, %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "ორშაბათი"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 პარამეტრები"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 პარამეტრები"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 პარამეტრები"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "ორშაბათი"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 პარამეტრები"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 პარამეტრები"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1, %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "მცდარი ალმები"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "ორშაბათი"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ორშაბათი"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "სამშაბათი"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 პარამეტრები"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 სტილი ვერ მოიძებნა\n"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to British English
+# Malcolm Hunter <malcolm.hunter@gmx.co.uk>, 2002,2003,2004, 2005, 2006, 2007, 2008, 2009.
+# Jonathan Riddell <kde-en-gb@jriddell.org>, 2003.
+# Andrew Coles <andrew_coles@yahoo.co.uk>, 2004, 2005, 2009, 2010.
+# Steve Allewell <steve.allewell@gmail.com>, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-05-23 17:08+0100\n"
+"Last-Translator: Slimane Selyan Amiri <selyan.kab@protonmail.com>\n"
+"Language-Team: British English <kde-l10n-en_gb@kde.org>\n"
+"Language: kab\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Qt-Contexts: true\n"
+"X-Generator: Poedit 2.4.2\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ahil-a yettwazuzer ddaw tewtilin n %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Turagt tazayazt tamatut GNU n lqem wis 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Turagt tazayazt tamatut taddayt GNU n lqem wis 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Turagt BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Turagt BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Turagt tazayazt Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Turagt tazayazt tamatut GNU n lqem wis 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Turagt tazayazt tamatut taddayt GNU n lqem wis 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Turagt tazayazt tamatut taddayt GNU n lqem wis 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Udmawan"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ur d-yettunefk ara"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Sken talɣut n umeskar."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Sken talɣut n turagt."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Isem n ufaylu azadur n unekcam n tnarirt i usnas-a."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "isem n ufaylu"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Asnas-a yura-t yiwen i yebɣan ad yeqqim d udrig."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 yura-t:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Ttxil-k·m seqdec https://bugs.kde.org i tuzna n wabugen."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Ttxil-k·m azen abugen ɣer %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Tamkerḍit %1 ur d-tettmuddu ara KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+#, fuzzy
+#| msgctxt "KFormat|SI prefix for 10^â\81»24"
+#| msgid "y"
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+#, fuzzy
+#| msgctxt "KFormat|SI prefix for 10^â\81»21"
+#| msgid "z"
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgctxt "KFormat|SI prefix for 10^â\81»18"
+#| msgid "a"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+#, fuzzy
+#| msgctxt "KFormat|SI prefix for 10^â\81»15"
+#| msgid "f"
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgctxt "KFormat|SI prefix for 10^â\81»12"
+#| msgid "p"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+#, fuzzy
+#| msgctxt "KFormat|SI prefix for 10^â\81»9"
+#| msgid "n"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:106
+#, fuzzy
+#| msgctxt "KFormat|SI prefix for 10^â\81»6"
+#| msgid "µ"
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgctxt "KFormat|SI prefix for 10^â\81»3"
+#| msgid "m"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "A"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "Am"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "S"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "AṬ"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 AṬ"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 KAṬ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MAṬ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GAṬ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TAṬ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EAṬ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 AṬ"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KAṬ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MAṬ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GAṬ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 n wussan"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 n yisragen"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 n tsedatin"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 n tasinin"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n militsinin"
+msgstr[1] "%n militsinin"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n n wass(wussan)"
+msgstr[1] "%n n wass(wussan)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n n usrag(yisragen)"
+msgstr[1] "%n n usrag(yisragen)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n tasdat(tisdatin)"
+msgstr[1] "%n tasdat(tisdatin)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n n tasint(tasinin)"
+msgstr[1] "%n n tasint(tasinin)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 akked %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Azemz urameɣtu"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Deg sin wussan"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Azekka"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Ass-a"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Iḍelli"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Sin wussan aya"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Tura kan"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 tesdat aya"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Ulac abrid %1"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob ur yettusefrak ara ɣef Windows"
--- /dev/null
+# translation of kdelibs4.po to Karakh
+#
+# Sairan Kikkarin <sairan@computer.org>, 2005, 2006, 2007, 2008, 2009.
+# Sairan Kikkarin <sairan@computer.org>, 2010, 2011, 2012.
+# Sairan Kikkarin <sairan(at)computer.org>, 2010, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2013-11-08 01:24+0600\n"
+"Last-Translator: Sairan Kikkarin <sairan@computer.org>\n"
+"Language-Team: Kazakh <kde-i18n-doc@kde.org>\n"
+"Language: kk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.2\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Бұл бағдарламаның лицензиялық шарттары келтірілмеген.\n"
+"Лицензиялық шарттарын бағдарламаның құжаттамасынан\n"
+"не бастапқы мәтінінен қараңыз.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Бағдарламаны тарату шарттары: %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU GPL лицензиясының 2-нұсқасы"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser GPL лицензиясының 2-нұсқасы"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD лицензиясы"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD лицензиясы"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Көркемдік лицензия"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Көркемдік лицензия"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU GPL лицензиясының 3-нұсқасы"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser GPL лицензиясының 3-нұсқасы"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser GPL лицензиясының 2-нұсқасы"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Басқа"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Келтірілмеген"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Дүниежүзіндегі аударушылар тобтарының арқасында KDE көп тілдерге "
+"аударылған.</p><p>KDE жергілікті тілдерге аудару туралы <a href=\"http://"
+"l10n.kde.org\">http://l10n.kde.org</a> деген сайтты қараңыз.</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Автор туралы мәліметті көрсету"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Лицензия мәліметін көрсету"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Бұл қолданбаны жазған адам беймәлім қалуын қалаған."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 дегеннің автор(лар)ы\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Қателер туралы http://bugs.kde.org дегенге хабарлаңыз.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Кате туралы хабарламаны %1 дегенге жіберіңіз.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 жиынында KDE 4 үйлесімді фабрикасы жоқ."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Кия"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Мия"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тир"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Пти"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Өңдеу"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Жіберу"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 кБ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЕБ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 КБ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЕБ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КиБ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МиБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГиБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ТиБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ПиБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ЕиБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ЗиБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ЙиБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 күн"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 сағат"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минут"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунд"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 милисекунд"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 күн"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 сағат"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 минут"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 секунд"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Жарамсыз нәрсе."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 күн"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Ертең"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Бүгін"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Кеше"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 минут"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 файлы жоқ"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Sairan Kikkarin <sairan(at)computer.org>, 2010.
+# Sairan Kikkarin <sairan@computer.org>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2011-06-20 04:59+0600\n"
+"Last-Translator: Sairan Kikkarin <sairan@computer.org>\n"
+"Language-Team: Kazakh <kde-i18n-doc@kde.org>\n"
+"Language: kk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.1\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "аудио CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF нүктелік қаріпі"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java апплеті"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML кеңейтулер адаптері"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE түстер сұлбасы"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff дестесі"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet әмияны"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar есеп беру үлгісі"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "-лері"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba нақышы"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan жоба басқару құжаты"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan жұмыс дестесі"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato жоба басқару құжаты"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato жоба басқару жұмыс дестесі"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar архиві"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "веб архиві"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML сұлбасы"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio плагин файлы"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum импорт еткені"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR кескіні"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE шікі кескін пішімі"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® оналтылықты объектік файл"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate файлдар тізімін жүктеу плагин тізімі"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc музыка ноталар файлы"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "қаріптер дестесі"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows сервері"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows жұмыс тобы"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE жүйе мониторы"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE нақышы"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta жобасы"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander файлы"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "картоп"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf сақталған ойыны"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf алаңы"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular құжат архиві"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri суреті"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo суреті"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo суреті"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig суреті"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg құжаты"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "сөздік жаттығу құжаты"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot файлы"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz сөздігі"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind профильдеу дерегі"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML үлгілеу файлы"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows сілтемесі"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet жүктеу тізімі"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete көңіл күйі белгілер архиві"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ контакты"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF құжаты"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC кескіні"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt белгілеу тіліндегі файл"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Khmer
+# Khoem Sokhem <khoemsokhem@khmeros.info>, 2008, 2009, 2010, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-06-27 10:04+0700\n"
+"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
+"Language-Team: Khmer\n"
+"Language: km\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Language: km-KH\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"កម្មវិធីនេះមិនមានបញ្ជាក់លក្ខខណ្ឌអាជ្ញាបណ្ណឡើយ ។\n"
+"សូមស្វែងរកលក្ខខណ្ឌអាជ្ញាបណ្ណ ដោយពិនិត្យមើលឯកសារ ឬកូដ ។\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "កម្មវិធីនេះត្រូវបានចែកចាយក្រោមលក្ខខណ្ឌរបស់ %1 ។"
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "អាជ្ញាបណ្ណសាធារណៈទូទៅ GNU កំណែ ២"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "អាជ្ញាបណ្ណ GNU Lesser General Public License កំណែ ២"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "អាជ្ញាប័ណ្ណ BSD"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "អាជ្ញាប័ណ្ណ BSD"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "អាជ្ញាបណ្ណសិល្បៈ"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "អាជ្ញាបណ្ណសិល្បៈ"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "អាជ្ញាបណ្ណសាធារណៈ Q"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "អាជ្ញាបណ្ណ GNU General Public License កំណែ ៣"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "អាជ្ញាបណ្ណ GNU Lesser General Public License កំណែ ៣"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "អាជ្ញាបណ្ណ GNU Lesser General Public License កំណែ ២"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ផ្ទាល់ខ្លួន"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "មិនបានបញ្ជាក់"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE ត្រូវបានបកប្រែជាភាសាខ្មែរ ដោយគម្រោងផ្ដួចផ្ដើមកម្មវិធីកុំព្យូទ័រភាសាខ្មែរ ។</p><p>ចំពោះ"
+"ព័ត៌មានបន្ថែមអំពីគម្រោង សូមទស្សនា <a href=\"http://www.khmeros.info\">www.khmeros."
+"info</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "បង្ហាញព័ត៌មានរបស់អ្នកនិពន្ធ"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "បង្ហាញព័ត៌មានអាជ្ញាបណ្ណ"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "កម្មវិធីនេះត្រូវបានសរសេរដោយអ្នកដែលមិនចង់នៅជាអនាមិក ។"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ត្រូវបានសរសេរដោយ\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "សូមប្រើ http://bugs.kde.org ដើម្បីរាយការណ៍កំហុស ។\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "សូមរាយការណ៍កំហុសទៅ %1 ។\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "បណ្ណាល័យ %1 មិនផ្ដល់រោងចក្រឆបគ្នានឹង KDE 4 ទេ ។"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "ព្រឹក"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ល្ងាច"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "ព្រឹក"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "ព្រឹក"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "សំបុត្រ"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ថៃ"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "ល្ងាច"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "ល្ងាច"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "កែសម្រួល"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ដាក់ស្នើ"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "ព្រឹក"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 បៃ"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 គីឡូបៃ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 មេកាបៃ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ជីកាបៃ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 តេរ៉ាបៃ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 បៃ"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 គីឡូបៃ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 មេកាបៃ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ជីកាបៃ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 តេរ៉ាបៃ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 បៃ"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 គីឡូបៃ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 មេកាបៃ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ជីកាបៃ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 តេរ៉ាបៃ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ថ្ងៃ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ម៉ោង"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 នាទី"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 វិនាទី"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 មិល្លីវិនាទី"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 ថ្ងៃ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ម៉ោង"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 នាទី"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 វិនាទី"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 និង %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ធាតុមិនត្រឹមត្រូវ ។"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 ថ្ងៃ"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "ថ្ងៃស្អែក"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ថ្ងៃនេះ"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ម្សិលមិញ"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 នាទី"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "មិនមានឯកសារ %1 ទេ"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of xml_mimetypes.po to Khmer
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Khoem Sokhem <khoemsokhem@khmeros.info>, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2010-12-20 16:16+0700\n"
+"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
+"Language-Team: Khmer <support@khmeros.info>\n"
+"Language: km\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Language: km-CM\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "ស៊ីឌីអូឌីយ៉ូ"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "ពុម្ពអក្សរផែនទីរូបភាពរបស់ SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "អាប់ភ្លេត Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "អាដាប់ទ័រផ្នែកបន្ថែមរបស់ KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "គ្រោងពណ៌របស់ KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "កញ្ចប់ KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "កាបូបរបស់ KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "ពុម្ពរបាយការណ៍របស់ Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "ស្បែករបស់ SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "ឯកសារគ្រប់គ្រងគម្រោងរបស់ Calligra"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "ឯកសារកញ្ចប់ការងារផែនការរបស់ Calligra"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "ឯកសារគ្រប់គ្រងគម្រោងរបស់ KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "កញ្ចប់ការងារគ្រប់គ្រងគម្រោង KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "ប័ណ្ណសារ Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "ប័ណ្ណសារបណ្ដាញ"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "គ្រោងការណ៍របស់ W3C XML"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "ឯកសារកម្មវិធីជំនួយ RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "នាំចូល KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "រូបភាព HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "ទ្រង់ទ្រាយរូបភាពដើម KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "ឯកសារវត្ថុគោលដប់ប្រាំមួយរបស់ Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "បញ្ជីកម្មវិធីជំនួយរបស់កម្មវិធីផ្ទុកបញ្ជីឯកសាររបស់ Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "ឯកសារជូនដំណឹងតន្ត្រី abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "កញ្ចប់ពុម្ពអក្សរ"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "ម៉ាស៊ីនបម្រើវីនដូ"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "ក្រុមការងាររបស់វីនដូ"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "កម្មវិធីត្រួតពិនិត្យប្រព័ន្ធរបស់ KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "ស្បែករបស់ KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "គម្រោង Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "ឯកសាររបស់ Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "ដំឡូង"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "ល្បែងដែលបានរក្សាទុករបស់ Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "វគ្គរបស់ Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "ប័ណ្ណសារឯកសាររបស់ Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "ឯកសារ KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "វាក្យស័ព្ទនៃឯកសាររបស់អ្នកបណ្ដុះបណ្ដាល"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "ឯកសារ KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "វាក្យស័ព្ទរបស់ KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "ទម្រង់ Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "ឯកសារ Umbrello UML Modeller"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "តំណវីនដូ"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "បញ្ជីទាញយករបស់ KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "ប័ណ្ណសារសញ្ញាអារម្មណ៍របស់ Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ទំនាក់ទំនង ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "ទ្រង់ទ្រាយរបស់ Microsoft Media"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "ឯកសារ Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "រូបភាព Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "ឯកសារភាសាសម្គាល់ Qt "
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Kannada
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Umesh Rudrapatna <urudrapatna@yahoo.com>, 2007.
+# Umesh Rudrapatna <umeshrs@gmail.com>, 2007, 2008, 2009.
+# Shankar Prasad <svenkate@redhat.com>, 2008, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-06-24 18:32+0530\n"
+"Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
+"Language-Team: kn_IN <kde-i18n-doc@kde.org>\n"
+"Language: kn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.0\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ಈ ಕ್ರಮವಿಧಿಗೆ (programme) ಯಾವುದೇ ಪರವಾನಗಿ ವಿವರಣೆಗಳನ್ನು ನಿಗದಿಗೊಳಿಸಿಲ್ಲ.\n"
+"ಪರವಾನಗಿ ವಿವರಗಳಿಗಾಗಿ ದಯವಿಟ್ಟು ದಸ್ತಾವೇಜುಗಳನ್ನೋ \n"
+" ಅಥವಾ ಆಕರವನ್ನೋ (source) ಪರಿಶೀಲಿಸಿ.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ಈ ಕ್ರಮವಿಧಿಯು '%1' ನ ಕರಾರುಗಳ ಅಡಿಯಲ್ಲಿ ವಿತರಿಸಲಾಗಿದೆ."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "ಜಿಪಿಎಲ್ ವಿ೨"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License ಆವೃತ್ತಿ ೨"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "ಎಲ್ಜಿಪಿಎಲ್ ವಿ೨"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License ಆವೃತ್ತಿ ೨"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD ಪರವಾನಗಿ"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD ಪರವಾನಗಿ"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "ಕಲಾತ್ಮಕ ಪರವಾನಗಿ"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "ಕಲಾತ್ಮಕ ಪರವಾನಗಿ"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "ಕ್ಯುಪಿಎಲ್ ವಿ೧.೦"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "ಜಿಪಿಎಲ್ ವಿ೩"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License ಆವೃತ್ತಿ ೩"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "ಎಲ್ಜಿಪಿಎಲ್ ವಿ೩"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License ಆವೃತ್ತಿ ೩"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "ಎಲ್ಜಿಪಿಎಲ್ ವಿ೨"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License ಆವೃತ್ತಿ ೨"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ಇಚ್ಛೆಯ (ಕಸ್ಟಮ್)"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "ಸೂಚಿಸಲಾಗಿಲ್ಲ"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>ವಿಶ್ವಾದ್ಯಂತ ಹಲವಾರು ತಂಡಗಳ ಶ್ರಮದ ಫಲವಾಗಿ KDE ಅನೇಕ ಭಾಷೆಗಳಿಗೆ ಭಾಷಾಂತರಗೊಂಡಿದೆ</"
+"p><p> KDE ಅಂತಾರ್ರಾಷ್ಟ್ರೀಕರಣದ ಬಗೆಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ <a href=\"http://l10n.kde."
+"org\">http://l10n.kde.org</a> ಗೆ ಭೇಟಿ ನೀಡಿ</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "ಕರ್ತೃ ಮಾಹಿತಿ ತೋರಿಸು"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "ಪರವಾನಗಿ ಮಾಹಿತಿ ತೋರಿಸು"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ಈ ಅನ್ವಯವು ಅನಾಮಧೇಯರಾಗಿ ಉಳಿಯಬೇಕೆಂದಿರುವ ಒಬ್ಭರಿಂದ ಬರೆಯಲ್ಲಟ್ಟಿತು."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 \n"
+"%2 ನಿಂದ ಬರೆಯಲ್ಪಟ್ಚಿತು"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "ದಯವಿಟ್ಟು ದೋಶಗಳನ್ನು ವರದಿ ಮಾಡಲು http://bugs.kde.org ಬಳಸಿ.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "ದಯವಿಟ್ಟು %1 ಗೆ ದೋಶಗಳನ್ನು ವರದಿಮಾಡಿ.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 ಭಂಡಾರವು (library) KDE ೪ ಸಹವರ್ತಿ ಕಾರ್ಯಾಗಾರವನ್ನು (factory) ನೀಡುವುದಿಲ್ಲ."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "ಪೂರ್ವಾಹ್ನ"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ಅಪರಾಹ್ನ"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "ಪೂರ್ವಾಹ್ನ"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "ಖ"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "ಮೇ"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ತೀರ್"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "ಸಂಪಾದಿಸು"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ಒಪ್ಪಿಸು"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "ಪೂರ್ವಾಹ್ನ"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 ಎಮ್ಬಿ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ಜಿಬಿ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ಟೆಬಿ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ಪೆಬಿ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ಇಬಿ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ಝಿಬಿ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ವೈಬಿ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 ಕಿಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 ಎಮ್ಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ಜಿಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ಟೆಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ಪೆಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ಇಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ಝಿಬಿ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ವೈಬಿ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ದಿನಗಳು"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ಘಂಟೆಗಳು"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 ನಿಮಿಷಗಳು"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 ಕ್ಷಣಗಳು"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 ಸಹಸ್ರಾಂಶಕ್ಷಣು ಮಿಲಿಸೆಕೆಂಡ್s)"
+msgstr[1] "%1 ಸಹಸ್ರಾಂಶಕ್ಷಣು ಮಿಲಿಸೆಕೆಂಡ್s)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 ದಿನಗಳು"
+msgstr[1] "%1 ದಿನಗಳು"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ಘಂಟೆಗಳು"
+msgstr[1] "%1 ಘಂಟೆಗಳು"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 ನಿಮಿಷಗಳು"
+msgstr[1] "%1 ನಿಮಿಷಗಳು"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 ಕ್ಷಣಗಳು"
+msgstr[1] "%1 ಕ್ಷಣಗಳು"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ಹಾಗು %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ಅಮಾನ್ಯವಾದ ಅಂಶ."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 ದಿನಗಳು"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ಈ ದಿನ"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ನಿನ್ನೆ"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 ನಿಮಿಷಗಳು"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "ಕಡತ %1 ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Korean messages for kdelibs.
+# Copyright (C) Free Software Foundation, Inc.
+# Cho Sung Jae <cho.sungjae@gmail.com>, 2007.
+# Shinjo Park <kde@peremen.name>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-05-16 20:18+0200\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
+"Language-Team: Korean <kde-kr@kde.org>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 20.12.3\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"이 프로그램의 라이선스 조항이 지정되지 않았습니다.\n"
+"문서나 소스 코드에서 라이선스 조항을 찾아 보십시오.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "이 프로그램은 %1의 조건 하에 배포됩니다."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU 일반 공중 라이선스 버전 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU 일반 공중 라이선스 버전 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD 라이선스"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD 라이선스"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "아티스틱 라이선스"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "아티스틱 라이선스"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q 공중 라이선스"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU 일반 공중 라이선스 버전 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU 일반 약소 공중 라이선스 버전 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU 일반 약소 공중 라이선스 버전 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "사용자 정의"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "지정하지 않음"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE는 전세계 번역 팀의 고마운 작업으로 많은 언어로 번역됩니다.</p><p>KDE "
+"국제화에 대한 더 많은 정보를 찾고 싶으시면 <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a>를 방문해 주십시오.</p><p>한국 KDE 국제화에 관한 "
+"자세한 정보는 <a href=\"http://www.kde.or.kr\">http://www.kde.or.kr</a>(한국 "
+"KDE 사용자 모임)을 방문해 주십시오.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "작성자 정보를 표시합니다."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "라이선스 정보를 표시합니다."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "이 프로그램의 desktop 항목의 기본 파일 이름입니다."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "파일 이름"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "이 프로그램은 익명으로 남고 싶은 사람이 작성했습니다."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 프로그램의 작성자:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "https://bugs.kde.org 사이트에 버그를 보고해 주십시오."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "%1(으)로 버그를 보고해 주십시오."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 라이브러리에서 KPluginFactory를 제공하지 않습니다."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1분 %2.%3초"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1분 %2초"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1시간 %2분"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1시간 %2분 %3.%4초"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1시간 %2분 %3초"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1일"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1시간"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1분"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1초"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n밀리초"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n일"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n시간"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n분"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n초"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "잘못된 날짜"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "모레"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "내일"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "오늘"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "어제"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "그저께"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "지금"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1분 전"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%2, %1"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 경로가 없음"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "`lsof' 실행 실패, 종료 코드 %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "Windows에서는 KListOpenFilesJob을 지원하지 않음"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Shinjo Park <kde@peremen.name>, 2009, 2010, 2011, 2013, 2014, 2017, 2020, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-05-16 20:18+0200\n"
+"Last-Translator: Shinjo Park <kde@peremen.name>\n"
+"Language-Team: Korean <kde-kr@kde.org>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 20.12.3\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD 오디오"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF 비트맵 글꼴"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "자바 애플릿"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML 확장 기능 어댑터"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE 색 배열"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff 패키지"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet 지갑"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar 보고서 템플릿"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba 테마"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Caligra Plan 프로젝트 관리 문서"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Caligra Plan 작업 패키지 문서"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato 프로젝트 관리 문서"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato 프로젝트 관리 작업 패키지"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar 압축 파일"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "웹 압축 파일"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML 스키마"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio 플러그인 파일"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum 가져오기"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR 그림"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE RAW 그림 형식"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® 16진수 개체 파일"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate 파일 목록 로더 플러그인 목록"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc 악보 파일"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "글꼴 패키지"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows 서버"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows 작업 그룹"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE 시스템 모니터"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE 테마"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta 프로젝트"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander 파일"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf 저장된 게임"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf 코스"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular 문서 압축 파일"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri 그림"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo 그림"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo 그림"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig 그림"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg 문서"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "단어장"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot 파일"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz 단어장"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind 프로필 덤프"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML 모델러 파일"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows 링크"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet 다운로드 목록"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete 이모티콘 압축 파일"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ 대화 상대"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft 미디어 포맷"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF 문서"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC 그림"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt 마크업 언어 파일"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT 설정 옵션"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT 코드 생성 옵션"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI UI 선언"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification 선언"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash 보고서"
--- /dev/null
+# translation of kdelibs4.po to Kurdish
+# Kurdish translation for kdelibs
+# Copyright (c) (c) 2006 Canonical Ltd, and Rosetta Contributors 2006
+# This file is distributed under the same license as the kdelibs package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2006.
+# Erdal Ronahi <erdal.ronahi@nospam.gmail.com>, 2006, 2008.
+# Erdal Ronahi <erdal.ronahi@nospam.gmail.com>, 2007, 2008, 2009.
+# Amed Çeko Jiyan <amedcj@gmail.com>, 2008.
+# Erdal Ronahî <erdal.ronahi@nospam.gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-08-13 15:45+0200\n"
+"Last-Translator: Erdal Ronahî <erdal.ronahi@nospam.gmail.com>\n"
+"Language-Team: Kurdish Team http://pckurd.net\n"
+"Language: ku\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.6.1\n"
+"X-Launchpad-Export-Date: 2007-11-26 09:44+0000\n"
+"X-Poedit-Language: Kurdish\n"
+"X-Poedit-Country: Kurdistan\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Bendên peymana vê bernameyê ne destnûşankirî ne.\n"
+"Ji kerema xwe re li belgeyên pergalê vegere an jî \n"
+"li şîfreya bingehê ji bo agahiyên li ser peymanê.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ev bername di bin banê lîsansa %1 tê belavkirin."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Lîsansa Raya Giştî a GNU, Guherto 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Lîsansa Gelempera Giştî ya Biçûktir a GNU, Guhertoya 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Lîsansa BSD"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Lîsansa BSD"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Lîsansa Hunerî"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Lîsansa Hunerî"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Lîsansa Gelempera Q"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Lîsansa Gelempera Giştî ya GNU, Guhertoya 2"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Lîsansa Gelempera Giştî ya Biçûktir a GNU, Guhertoya 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Lîsansa Gelempera Giştî ya Biçûktir a GNU, Guhertoya 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Taybet"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nehatiye diyarkirin"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Wergerandina KDE'yê ji hêla Koma PCKurdê ve hatiye kirin. Malpera Koma "
+"PCKurdê: <a href=\"http:www.pckurd.net\">http://www.pckurd.net</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Agahiya nivîskêr nîşan bide"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Agahiya lîsansê nîşan bide"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Ev sepan ji aliyê kesekî/e ku naxwaze navê wî/ê deşîfre bibe hatiye "
+"nivîsandin."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ji hêla\n"
+"%2 ve hatiye nivîsandin"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Ji kerema xwe bo ragihandina çewtiyan navnîşana http://bugs.kde.org bikar "
+"bîne.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Ji kerema xwe re çewtiyan ragihîne navnîşana %1\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Pirtûkxaneya %1 hilberînereke ahengî KDE 4ê nahundirîne."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "bn"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pn"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "bn"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Gul"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Sererastkirin"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Şandin"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "bn"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 roj"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 demjimêr"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 xulek"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 çirke"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 mîlîçirke"
+msgstr[1] "%1 mîlîçirke"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 roj"
+msgstr[1] "%1 roj"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 demjimêr"
+msgstr[1] "%1 demjimêr"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 xulek"
+msgstr[1] "%1 xulek"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 çirke"
+msgstr[1] "%1 çirke"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 û %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Hêmana nederbasdar."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 roj"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Îro"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Do"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 xulek"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Pelê %1 tune."
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Luxembourgish
+# kevin claude everard <kevin@math.uni-sb.de>, 2005.
+# Michel Ludwig <michel.ludwig@kdemail.net>, 2005, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2006-06-22 16:29+0200\n"
+"Last-Translator: Michel Ludwig <michel.ludwig@kdemail.net>\n"
+"Language-Team: Luxembourgish <kde-i18n-lb@kde.org>\n"
+"Language: lb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Fir dëse Programm ass keng Lizenz ugin.\n"
+"Kuckt w.e.g. an der Dokumentatioun oder am\n"
+"Quellcode no de Lizenzbedingungen\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dëse Programm ass ënnert de Bedingunge vun %1 veröffentlëcht ginn."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Lizenz:"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Lizenz:"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Öffentleche Schlëssel"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Öffentleche Schlëssel"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Öffentleche Schlëssel"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "&Benotzerdéfinéiert"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Kee Provider gewielt."
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE gëtt a vill verschidde Sproochen iwwersat. Ën décke Merci dowéinst un "
+"all Iwwersetzungsteam op der Welt.</p><p>Méi Informatioune fannt dir "
+"nnerth<a href=\"ëttp://l10n.kde.org\">http://l10n.kde.org</a>.</p> <p>Wann "
+"dir méi iwwert déi lëtzebuergesch Iwwersetzung wësse wëllt, da kuckt w.e.g. "
+"op <a href=\"http://lb.l10n.kde.org\">http://lb.l10n.kde.org</a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Informatiounen iwwert den Auteur uweisen"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Lizenzinformatiounen uweisen"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Vietnamesësch"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Den Auteur vun dësem Programm wëllt anonym bleiwen."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ass vum\n"
+"%2 geschriwwe ginn"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Mellt eventuell Käfere w.e.g. ënnert http://bugs.kde.org.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Mellt eventuell Käfere w.e.g. bei %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "D'Bibliothéik %1 huet keng %2-Funktioun."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "moies"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "nomëttes/owës"
+
+#: lib/util/kformatprivate.cpp:105
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Un"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "moies"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "An der Rei"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Änneren"
+
+#: lib/util/kformatprivate.cpp:111
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Veränneren"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Verschécken"
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "moies"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "Méinden"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 Optiounen"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 Optiounen"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 Optiounen"
+msgstr[1] "%1 Optiounen"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "Méinden"
+msgstr[1] "Méinden"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 Optiounen"
+msgstr[1] "%1 Optiounen"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 Optiounen"
+msgstr[1] "%1 Optiounen"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ongülteg Werter"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Méinden"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Méinden"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dënschten"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 Optiounen"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "De Stil %1 ass net fonnt ginn\n"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Lithuanian
+# Ričardas Čepas <rch@richard.eu.org>, 2002-2004.
+# Donatas Glodenis <dgvirtual@akl.lt>, 2004-2009.
+# Gintautas Miselis <gintautas@miselis.lt>, 2008.
+# Andrius Štikonas <andrius@stikonas.eu>, 2009.
+# Tomas Straupis <tomasstraupis@gmail.com>, 2011.
+# Remigijus Jarmalavičius <remigijus@jarmalavicius.lt>, 2011.
+# Liudas Ališauskas <liudas.alisauskas@gmail.com>, 2011, 2012, 2013, 2014.
+# Liudas Alisauskas <liudas@akmc.lt>, 2013, 2015.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2019-12-28 01:00+0200\n"
+"Last-Translator: Moo\n"
+"Language-Team: Lithuanian <kde-i18n-lt@kde.org>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10>=2 && (n%100<10 || n"
+"%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3);\n"
+"X-Generator: Poedit 2.2.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Šiai programai nebuvo nurodytos jokios licencijavimo nuostatos.\n"
+"Norėdami sužinoti licencijavimo nuostatas, patikrinkite dokumentaciją\n"
+"ar pradinį kodą.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ši programa yra platinama pagal %1 licencijos nuostatas."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU bendroji viešoji licencija, 2 versija"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU mažesnioji bendroji viešoji licencija, 2 versija"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD licencija"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD licencija"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Kūrybinė licencija"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Kūrybinė licencija"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q viešoji licencija"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU bendroji viešoji licencija, 3 versija"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU mažesnioji bendroji viešoji licencija, 3 versija"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU mažesnioji bendroji viešoji licencija, 2.1 versija"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Tinkinta"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nenurodyta"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE yra verčiama į daugybę kalbų, įvairių vertimo komandų iš viso "
+"pasaulio dėka.</p><p>Norėdami daugiau sužinoti apie KDE vertimą, "
+"apsilankykite KDE vertimui skirtoje internetinėje svetainėje <a href="
+"\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Rodyti informaciją apie autorių."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Rodyti licencijos informaciją."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Šios programos darbalaukio įrašo bazinis failo pavadinimas."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "failo pavadinimas"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Šią programą parašė asmuo, kuris panoro išlikti anonimu."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 parašė:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Norėdami pranešti apie klaida, naudokite http://bugs.kde.org."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Apie klaidas praneškite į %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 biblioteka nesiūlo KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit."
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1min.%2.%3sek."
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1min.%2sek."
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1val.%2min."
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1val.%2min.%3.%4sek."
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1val.%2min.%3sek."
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 d."
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 val."
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 min."
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sek."
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekundė"
+msgstr[1] "%n milisekundės"
+msgstr[2] "%n milisekundžių"
+msgstr[3] "%n milisekundė"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n diena"
+msgstr[1] "%n dienos"
+msgstr[2] "%n dienų"
+msgstr[3] "%n diena"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n valanda"
+msgstr[1] "%n valandos"
+msgstr[2] "%n valandų"
+msgstr[3] "%n valanda"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minutė"
+msgstr[1] "%n minutės"
+msgstr[2] "%n minučių"
+msgstr[3] "%n minutė"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekundė"
+msgstr[1] "%n sekundės"
+msgstr[2] "%n sekundžių"
+msgstr[3] "%n sekundė"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ir %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Neteisinga data"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Po dviejų dienų"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Rytoj"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Šiandien"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Vakar"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Prieš dvi dienas"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 min."
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Kelio %1 nėra"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Nepavyko įvykdyti \"lsof\", klaidos kodas %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob nėra palaikoma Windows sistemose"
--- /dev/null
+# Lithuanian translations for xml_mimetypes package.
+# This file is distributed under the same license as the xml_mimetypes package.
+#
+# Tomas Straupis <tomasstraupis@gmail.com>, 2010, 2011.
+# Liudas Ališauskas <liudas@akmc.lt>, 2015.
+# Mindaugas Baranauskas <opensuse.lietuviu.kalba@gmail.com>, 2015.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-26 11:18+0000\n"
+"Last-Translator: Andrius Štikonas <andrius@stikonas.eu>\n"
+"Language-Team: lt <kde-i18n-lt@kde.org>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10>=2 && (n%100<10 || n"
+"%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3);\n"
+"X-Generator: Poedit 2.2.4\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Garso CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF rastrinis šriftas"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java programėlė"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML plėtinių adapteris"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE spalvų rinkinys"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff paketas"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet slaptažodinė"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar ataskaitos šablonas"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "Plasma įskiepis"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba apipavidalinimas"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan projektų valdymo dokumentas"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan darbo paketo dokumentas"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato projektų valdymo dokumentas"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato projektų valdymo darbo paketas"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar archyvas"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "saityno archyvas"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML schema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio papildinio failas"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum importavimas"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR paveikslas"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE neapdorotų paveikslų formatai"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® šešioliktainio objekto failas"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate failų sąrašo įkėliklio papildinių sąrašas"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc muzikos natų failas"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "šriftų paketas"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows serveris"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows darbo grupė"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE sistemos prižiūryklė"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE apipavidalinimas"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta projektas"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander failas"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "bulvė"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf įrašytas žaidimas"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf laukas"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular dokumento archyvas"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri figūra"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo figūra"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo figūra"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig figūra"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg dokumentas"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "žodyno treniruoklio dokumentas"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot failas"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz žodynas"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind profilio kopija"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML modeliuotojo failas"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows nuoroda"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet atsiuntimų sąrašas"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete jaustukų archyvas"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ adresatas"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft medijos formatas"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF dokumentas"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC paveikslas"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt ženklinimo kalbos failas"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT konfigūravimo parinktys"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT kodo generavimo parinktys"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI naudotojo sąsajos deklaracija"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification deklaracija"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash pranešimas"
--- /dev/null
+# translation of kdelibs4.po to Latvian
+# kdelibs.po tulkojums uz Latviešu valodu
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+#
+# Maris Nartiss <maris.nartiss@gmail.com>, 2005.
+# Maris Nartiss <maris.kde@gmail.com>, 2006, 2007, 2008, 2009, 2010, 2011.
+# Linux localization project <viesturs.zarins@mii.lu.lv>, 2007.
+# Viesturs Zarins <viesturs.zarins@mii.lu.lv>, 2007, 2008, 2010.
+# Viesturs Zariņš <viesturs.zarins@mii.lu.lv>, 2009.
+# Einars Sprugis <einars8@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2011-07-06 12:57+0300\n"
+"Last-Translator: Maris Nartiss <maris.kde@gmail.com>\n"
+"Language-Team: Latvian\n"
+"Language: lv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+"X-Launchpad-Export-Date: 2007-11-22 17:44+0000\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Licenzēšanas noteikumi šai programmai nav uzrādīti.\n"
+"Lūdzu, pārbaudiet, vai dokumentācijā vai avotā nav norādīti\n"
+"licenzēšanas noteikumi.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Šī programma tiek izplatīta saskaņā ar %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License versija 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD licence"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD licence"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic licence"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic licence"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public licence"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License versija 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License versija 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License versija 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Pielāgota"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nav norādīta"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE ir pārtulkots daudzās valodās pateicoties tulkotāju komandu darbam no "
+"visas pasaules.</p><p>Papildu informācijai par KDE internacionalizāciju "
+"apmeklējiet <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Parādīt autoru informāciju"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Parādīt licences informāciju"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Programmas autors vēlas palikt anonīms."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 uzrakstīja\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Lūdzu, izmantojiet http://bugs.kde.org, lai ziņotu par kļūdām.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Lūdzu, ziņojiet par kļūdām %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Bibliotēka %1 nepiedāvā ar KDE savietojamu ražotāju."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Sūtīt pa pastu"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Taizemes"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Rediģēt"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Nosūtīt"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dienas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 stundas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minūtes"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundes"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisekunde"
+msgstr[1] "%1 milisekunde"
+msgstr[2] "%1 milisekunde"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 dienas"
+msgstr[1] "%1 dienas"
+msgstr[2] "%1 dienas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 stundas"
+msgstr[1] "%1 stundas"
+msgstr[2] "%1 stundas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minūtes"
+msgstr[1] "%1 minūtes"
+msgstr[2] "%1 minūtes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekundes"
+msgstr[1] "%1 sekundes"
+msgstr[2] "%1 sekundes"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 un %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Nederīgs vienums."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 dienas"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Rīt"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Šodien"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Vakar"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minūtes"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Fails %1 neeksistē"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of xml_mimetypes.po to Latvian
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Viesturs Zariņš <viesturs.zarins@mii.lu.lv>, 2009.
+# Maris Nartiss <maris.kde@gmail.com>, 2009.
+# Einars Sprugis <einars8@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2011-08-18 00:00+0300\n"
+"Last-Translator: Einars Sprugis <einars8@gmail.com>\n"
+"Language-Team: Latvian <locale@laka.lv>\n"
+"Language: lv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.2\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF bitkartes fonts"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java sīklietotne"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML paplašinājumu adapteris"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE krāsu shēma"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff pakotne"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet maks"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar atskaites sagatave"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plazmoīds"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba tēma"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan projektu pārvaldības dokuments"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan darba pakotnes dokuments"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato projektu pārvaldības dokuments"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato projektu pārvaldības darba pakotne"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar arhīvs"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "tīmekļa arhīvs"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML shēma"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio spraudņa fails"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum imports"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR attēls"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE raw attēlu formāti"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® hexadecimālais objekta fails"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate failu saraksta ielādētāja spraudņa saraksts"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc mūzikas notācijas fails"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "fontu pakotne"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows serveris"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows darbagrupa"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE sistēmas novērotājs"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE tēma"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta projekts"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander fails"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "kartupelis"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf saglabāta spēle"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf kurss"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular dokumentu arhīvs"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri figūra"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo figūra"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo figūra"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig figūra"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg dokuments"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "vārdnīcas trenētāja dokuments"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot fails"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz vārdnīca"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind profilēšanas dati"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML Modelētāja fails"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows saite"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet jelupielāžu saraksts"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete emocijzīmju arhīvs"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ kontakts"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media formāts"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF dokuments"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC attēls"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt Markup Language fails"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Hindi
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Sangeeta Kumari <sangeeta09@gmail.com>, 2008.
+# Rajesh Ranjan <rajesh672@gmail.com>, 2010.
+# Rajesh Ranjan <rranjan@redhat.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-09-24 15:44+0530\n"
+"Last-Translator: Rajesh Ranjan <rranjan@redhat.com>\n"
+"Language-Team: Hindi <fedora-trans-hi@redhat.com>\n"
+"Language: mai\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ई प्रोग्राम क' लेल कोनो लाइसेंसिंग शर्तें उल्लेखित नहि छी.\n"
+"कृप्या लाइसेंसिंग शर्तों केर लेल\n"
+"दस्ताबेज अथवा स्रोत देखू.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ई प्रोग्राम %1 शर्तों केर अधीन वितरित कएल गेल अछि."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "जीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण २"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "एलजीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करण २"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "बीएसडी लाइसेंस"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "क्यूपीएल सं.1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "क्यू पब्लिक लाइसेंस"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "जीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण ३"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "एलजीपीएल सं.३"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "जीएनयू जनरल पब्लिक लाइसेंस संस्करण ३"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "एलजीपीएल सं.२"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "जीएनयू लेसर जनरल पब्लिक लाइसेंस संस्करण २"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "पसंदीदा"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "निर्दिष्ट नहि"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>केडीइ बहुते भाषासभ मे अनूदित अछि. एहि क' लेल विश्व भर केर अनुवादकसभक टोली केँ "
+"हार्दिक धन्यवाद.</p><p>केडीइ केर अंतर्राष्ट्रीयकरण केर संबंध मे आओर बेसी जानकारी क' लेल "
+"एतय जाउ: <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "लेखक कए जानकारी देखाबू"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "लाइसेंसक जानकारी देखाबू"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ई अनुप्रयोग केँ कोोनो एहन लोकनि द्वारा लिखल गेल अछि जे बेनाम बनल रहब चाहैत अछि."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 केँ \n"
+"%2 केर द्वारा लिखल गेल"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "कृप्या http://bugs.kde.org क' उपयोग बग रिपोट क' लेल करू.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "कृप्या बग रिपोट %1 केँ भेजू.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "लाइब्रेरी %1 केडीइ ४ योग्य फैक्टरी प्रदान नहि करता."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "पूर्वाह्न"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "अपराह्न"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "पूर्वाह्न"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "डाक"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "थाइ"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "संपादन"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "सुपुर्द करू"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "पूर्वाह्न"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 दिन"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 घंटा"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 मिनट"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 सकेंड"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 मिली-सकेंड"
+msgstr[1] "%1 मिली-सकेंड"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 दिन"
+msgstr[1] "%1 दिन"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 घंटा"
+msgstr[1] "%1 घंटा"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 मिनट"
+msgstr[1] "%1 मिनट"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 सकेंड"
+msgstr[1] "%1 सकेंड"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 आओर %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "अवैध मद."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 दिन"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "आइ"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "कालि"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 मिनट"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "फाइल %1 मोजुद नहि अछि"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Macedonian
+#
+# Copyright (C) 2000,2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# Dimitar Indovski <dime@gord.com.mk>
+# Damjan Janevski <miopa@freemail.org.mk>
+# Dragan Sekulovski <d_sekulovski@yahoo.com>
+#
+# Maratonec , 2002.
+# Dragan Bocevski <d_bocevski@hotmail.com>, 2002.
+# Danko Ilik <danko@mindless.com>, 2002,2003.
+# Bozidar Proevski <bobibobi@freemail.com.mk>, 2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
+# Danko Ilik <danko@on.net.mk>, 2003.
+# Darko Nikolovski <darkon@macedonia.homelinux.org>, 2003.
+# Ivan Dimitrov <ivan34mk@yahoo.com>, 2003.
+# Magdica Shambevska <magdica@yahoo.com>, 2004.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-01-27 10:39+0100\n"
+"Last-Translator: Bozidar Proevski <bobibobi@freemail.com.mk>\n"
+"Language-Team: Macedonian <mkde-l10n@lists.sourceforge.net>\n"
+"Language: mk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: Plural-Forms: nplurals=3; plural=n%10==1 ? 0 : n%10==2 ? 1 : "
+"2;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"За оваа програма не е издадена лиценца.\n"
+"Проверете ги документацијата на програмата\n"
+"или нејзиниот изворен код\n"
+"за евентуална лиценцираност.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Оваа програма се дистрибуира под условите на %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Лиценцата BSD"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Лиценцата BSD"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Лиценцата Artistic"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Лиценцата Artistic"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Лиценцата Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Сопствено"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Не е зададено"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE е преведен на повеќе светски јазици благодарение на работата на "
+"повеќе преведувачки тимови низ целиот свет.</p><p>За повеќе информации "
+"посетете ја Интернет-страницата http://i18n.kde.org</p><p>Информации за "
+"нашата работа може да добиете на страницата http://mkde.sourceforge.net</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Прикажува информации за авторот"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Прикажува информации за лиценцата"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Оваа апликација е напишана од некој што сака да остане анонимен."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 е напишано од\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Користете го http://bugs.kde.org за пријавување бубачки.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Користете го %1 за пријавување бубачки.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Библиотеката %1 нема соодветна работилница компатибилна со KDE4."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "По пошта"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тајландски"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Уредување"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Испрати"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дена"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 часа"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минути"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунди"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 милисекунда"
+msgstr[1] "%1 милисекунда"
+msgstr[2] "%1 милисекунда"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 дена"
+msgstr[1] "%1 дена"
+msgstr[2] "%1 дена"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 часа"
+msgstr[1] "%1 часа"
+msgstr[2] "%1 часа"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 минути"
+msgstr[1] "%1 минути"
+msgstr[2] "%1 минути"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 секунди"
+msgstr[1] "%1 секунди"
+msgstr[2] "%1 секунди"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 и %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "invalid flags"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "невалидни знаменца"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 дена"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Денес"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Вчера"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 минути"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "%1 is 'the slot asked for foo arguments', %2 is 'but there are only bar "
+#| "available'"
+#| msgid "%1, %2."
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2."
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Датотеката %1 не постои"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to
+# Malayalam translation of kdelibs4.
+# Copyright (C) 2007-2010 This_file_is_part_of_KDE
+# This file is distributed under the same license as the kdelibs package.
+# Anoop | അനൂപ് Panavalappil | പനവളപ്പില് <gnuanu@gmail.com>, 2008.
+# ANI PETER|അനി പീറ്റര് <peter.ani@gmail.com>, 2008.
+# Maxin B. John <maxinbjohn@gmail.com>, 2007.
+# Manu S Madhav | മനു എസ് മാധവ് <manusmad@gmail.com>, 2008.
+# Praveen Arimbrathodiyil <pravi.a@gmail.com>, 2007, 2008, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-12-29 15:32+0530\n"
+"Last-Translator: \n"
+"Language-Team: SMC <smc.org.in>\n"
+"Language: ml\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ഈ പ്രോഗ്രാമിനു് അനുമതികളൊന്നും പ്രസ്താപിച്ചിട്ടില്ല.\n"
+"അനുമതി ഉടമ്പടികളെക്കുറിച്ചറിയാന് ദയവായി സഹായകക്കുറിപ്പോ\n"
+" ഉറവിടമോ പരിശോധിയ്ക്കുക.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ഈ പ്രോഗ്രാം %1 പ്രകാരമുള്ള നിബന്ധനകള്ക്കനുസരിച്ചാണ് വിതരണം ചെയ്തിട്ടുള്ളത്."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "ജിപിഎല് വി2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "ഗ്നു ജനറല് പബ്ലിക് ലൈസന്സ് ലക്കം 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "എല്ജിപിഎല് വി2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "ഗ്നു ലസ്സര് ജനറല് പബ്ലിക് ലൈസന്സ് ലക്കം 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "ബിഎസ്ഡി ലൈസന്സ്"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "ബിഎസ്ഡി ലൈസന്സ്"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "ആര്ട്ടിസ്റ്റിക് ലൈസന്സ്"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "ആര്ട്ടിസ്റ്റിക് ലൈസന്സ്"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "ക്യുപിഎല് v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "ക്യു പബ്ലിക് ലൈസന്സ്"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "ജിപിഎല് വി3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "ഗ്നു ജനറല് പബ്ലിക് ലൈസന്സ് ലക്കം 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "എല്ജിപിഎല് വി3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "ഗ്നു ലെസ്സര് ജനറല് പബ്ലിക് ലൈസന്സ് ലക്കം 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "എല്ജിപിഎല് വി2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "ഗ്നു ലസ്സര് ജനറല് പബ്ലിക് ലൈസന്സ് ലക്കം 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "സ്വന്തമായുള്ള"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "വ്യക്തമാക്കിയിട്ടില്ല"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>കെഡിഇ മലയാളം നിങ്ങള്ക്കായി അവതരിപ്പിക്കുന്നതു് സ്വതന്ത്ര മലയാളം കമ്പ്യൂട്ടിങ്ങ്പ്രവര്ത്തകരാണു്.</"
+"p><p>സ്വതന്ത്ര മലയാളം കമ്പ്യൂട്ടിങ്ങ് കൂട്ടായ്മയെപ്പറ്റി കൂടുതലറിയാനും മലയാളം കമ്പ്യൂട്ടിങ്ങ് പ്രവര്"
+"ത്തനങ്ങളില് പങ്കുചേരാനും <a href=\"http://smc.org.in\">http://smc.org.in </a> എന്ന "
+"വെബ്സൈറ്റ് സന്ദര്ശിയ്ക്കുക</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "രചയിതാവിനെക്കുറിച്ചുള്ള വിവരം കാണിയ്ക്കുക"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "അനുമതി പത്രത്തെക്കുറിച്ചുള്ള വിവരം കാണിയ്ക്കുക"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "പേര് വെളിപ്പെടുത്താനാഗ്രഹിയ്ക്കാത്തോരാളാണ് ഈ പ്രയോഗമെഴുതിയിട്ടുള്ളത്."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%2 ആണു് %1\n"
+"എഴുതിയതു്"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "ദയവായി പിഴവുകളറിയിയ്ക്കാനായി http://bugs.kde.org ഉപയോഗിയ്ക്കുക.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "%1-ലേക്കു് പിശകുകള് രേഖപ്പെടുത്തുക.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "'%1' എന്ന ലൈബ്രറി കെഡിഇ നാലിനോട് ചേര്ന്നുപോകുന്ന ഒരു ഫാക്ടറി നല്കുന്നില്ല."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "രാവിലെ"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "വൈകുന്നേരം"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "രാവിലെ"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "എഎം"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "മെയില്"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ഥായി"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "പി"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "പി"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "മാറ്റം വരുത്തുക"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "സമര്പ്പിക്കുക"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "രാവിലെ"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ബി"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 കെബി"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 എംബി"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ജിബി"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ടിബി"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 പീബി"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ഇബി"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ഇസഡ്ബി"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 വൈബി"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ബി"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 കെബി"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 എംബി"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ജിബി"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ടിബി"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 പീബി"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ഇബി"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ഇസഡ്ബി"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 വൈബി"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ബി"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 കെഐബി"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 എംഐബി"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ജിഐബി"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ടിഐബി"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 പിഐബി"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ഇഐബി"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ഇസഡ്ഐബി"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 വൈഐബി"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ദിവസങ്ങള്"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 മണിക്കൂറുകള്"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 മിനിറ്റുകള്"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 സെക്കന്റുകള്"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 മില്ലിസെക്കന്റുകള്"
+msgstr[1] "%1 മില്ലിസെക്കന്റുകള്"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 ദിവസങ്ങള്"
+msgstr[1] "%1 ദിവസങ്ങള്"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 മണിക്കൂറുകള്"
+msgstr[1] "%1 മണിക്കൂറുകള്"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 മിനിറ്റുകള്"
+msgstr[1] "%1 മിനിറ്റുകള്"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 സെക്കന്റുകള്"
+msgstr[1] "%1 സെക്കന്റുകള്"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ഉം %2 ഉം"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "തെറ്റായ വസ്തു."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 ദിവസങ്ങള്"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ഇന്ന്"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ഇന്നലെ"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 മിനിറ്റുകള്"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 ഫയല് നിലവിലില്ല"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of xml_mimetypes.po to
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Anish A <anish.nl@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2010-12-29 12:04+0530\n"
+"Last-Translator: Anish A <anish.nl@gmail.com>\n"
+"Language-Team: Swathantra Malayalam Computing | സ്വതന്ത്ര മലയാള കമ്പ്യൂട്ടിങ് "
+"<discuss@lists.smc.org.in>\n"
+"Language: ml\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "റിലാക്സ് എന് ജി"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "സിഡി ശബ്ദം"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "എസ് എന് എഫ് ബിറ്റ്മാപ്പ് അക്ഷരസഞ്ചയം"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "ജാവ ആപ്പ്ലെറ്റ്"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "കെഎച്ച്ടിഎംഎല് എക്സ്റ്റന്ഷന് അഡാപ്റ്റര്"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "കെഡിഇ നിറക്കൂട്ട്"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "കെന്യൂസ്റ്റഫ് പാക്കേജ്"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "കെവാലറ്റ് മടിശ്ശീല"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "കുഗാര് അറിയിപ്പ് ഫലകം"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "പ്ലാസ്മോയിഡ്"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "സൂപ്പര്കരാംബ പ്രമേയം"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "കാലിഗ്ര രൂപരേഖ പദ്ധതി നടത്തിയിപ്പ് രേഖ"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "കാലിഗ്ര രൂപരേഖ പാക്കേജ് രേഖ"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "കെപ്ലേറ്റോ പദ്ധതി നടത്തിയിപ്പ് രേഖ"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "കെപ്ലേറ്റോ പദ്ധതി നടത്തിയിപ്പ് ജോലി രേഖ"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "കുഗര് ശേഖരം"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "വെബ് ശേഖരണം"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "ഡബ്ള്യു 3 സി എക്സ് എം എല് രേഖ"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "റിയല് ശബ്ദ സംയോജക ഫയല്"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "കെഫോട്ടോആല്ബം ഇറക്കുമതി"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "എച്ച് ഡി ആര് ചിത്രം"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "കെഡിഇ സംസ്കരിക്കാത്ത ചിത്ര ഘടന"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "ഇന്റെല്® ഹെക്സാഡെസിമല് ഒബ്ജക്റ്റ് ഫയല്"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "കേറ്റ് ഫയല് പട്ടിക ലഭ്യമാക്കുന്നതിന്റെ സംയോജകങ്ങളുടെ പട്ടിക"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "എബിസി സംഗീത ചിഹ്ന ഫയല്"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "അക്ഷരസഞ്ചയ പാക്കേജ് "
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "വിന്ഡോസ് സേവകന്"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "വിന്ഡോസ് പണി-കൂട്ടം"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "കെഡിഇ സിസ്റ്റം നിരിക്ഷകന്"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "കെഡിഇ പ്രമേയം"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "ക്വാണ്ട പദ്ധതി"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "കോമാന്ഡെര് ഫയല്"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "ഉരുള കിഴങ്ങ്"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "കോള്ഫ് ശേഖരിച്ച കളി"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "കോള്ഫ് കോഴ്സ്"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "ഓക്കുലാര് രേഖകളുടെ ശേഖരം"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "കാബ്രി ചിത്രം"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "ഡോ. ജിയോ ചിത്രം"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "കെജിയോ ചിത്രം"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "കിഗ് ചിത്രം"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "കെസെഗ് രേഖ"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "പദാവലി പരിശീലന രേഖ"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "കെഎം പ്ലോട്ട് ഫയല്"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "കെവേര്ഡ്ക്യുസ്സ് പദാവലി"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "കാഷ്ഗ്രിന്റ്/കാള്ഗ്രിന്റ് പ്രൊഫൈല് ഡമ്പ്"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "ആമ്പ്രല്ലോ യു എം എല് മാത്രക ഫയല്"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "വിന്ഡോസ് കണ്ണി"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "കെഗെറ്റ് ഡൌണ്ലോഡ് പട്ടിക"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "കോപ്പിറ്റേ വികാരചിഹ്നങ്ങളുടെ ശേഖരം"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ഐ സി ക്യൂ സമ്പര്ക്കം"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "മൈക്രോസോഫ്റ്റ് മിഡിയ ഘടന"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "ടര്ട്ടില് ആര് ഡി എഫ് രേഖ"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "സോഫ്റ്റ്ഇമേജ് പിക്ക് ചിത്രം"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to marathi
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Sandeep Shedmake <sandeep.shedmake@gmail.com>, 2008, 2009.
+# Chetan Khona <chetan@kompkin.com>, 2012, 2013, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2014-10-28 15:25+0530\n"
+"Last-Translator: Chetan Khona <chetan@kompkin.com>\n"
+"Language-Team: Marathi <kde-i18n-doc@kde.org>\n"
+"Language: mr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Lokalize 1.5\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"या प्रोग्राम करिता कुठल्याही परवाना अटींचा उल्लेख नही.\n"
+"कृपया परवाना अटींकरिता\n"
+"दस्तऐवजाचे स्रोत पहा.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "कार्यक्रम %1 च्या अटी अंतर्गत वितरीत केला गेला आहे."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD परवाना"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD परवाना"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक परवाना"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "आर्टिस्टिक परवाना"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ऐच्छिक"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "निश्चित नाही"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>केडीई अनेक भाषांमध्ये भाषांतरीत आहे याकरिता जग भरातील सर्व अनुवादकांना हार्दिक शुभेच्छा."
+"</p><p>केडीई आंतर्राष्ट्रीयीकरणा विषयी अधिक माहिती करिता <a href=\"http://l10n."
+"kde.org\">http://l10n.kde.org</a> येथे जा</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "लेखकाविषयी माहिती दर्शवा"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "परवानाविषयक माहिती दर्शवा"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "या अनुप्रयोग व्यक्ति द्वारे लिखीत आहे जो निनावी रहना पसंत करतो."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "%s was written by:\n"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%s हे याद्वारे लिहीले गेले : \n"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "बग अहवाल सादरकरण्याकरिता http://bugs.kde.org वापरा.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "कृपया बग %1 येथे लिहून पाठवा.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "लायब्ररी %1 केप्लगइनफेक्ट्री पुरवित नाही."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "गुरु"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "मे"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "तिर"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "संपादित करा"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "सादर करा"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 दिवस"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 तास"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 मिनीट"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 सेकंद"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n मिलीसेकंद"
+msgstr[1] "%n मिलीसेकंद"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n दिवस"
+msgstr[1] "%n दिवस"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n तास"
+msgstr[1] "%n तास"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n मिनीट"
+msgstr[1] "%n मिनीट"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n सेकंद"
+msgstr[1] "%n सेकंद"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 व %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "अवैध वस्तु."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n दिवस"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "उद्या"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "आज"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "काल"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 मिनीट"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "फाईल %1 अस्तित्वात नाही"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Chetan Khona <chetan@kompkin.com>, 2013, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2014-10-28 14:40+0530\n"
+"Last-Translator: Chetan Khona <chetan@kompkin.com>\n"
+"Language-Team: American English <kde-i18n-doc@kde.org>\n"
+"Language: mr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Lokalize 1.5\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD ऑडिओ"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF बिटमॅप फॉन्ट"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "जावा एप्लेट"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML एक्सटेंशन एडॅप्टर"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "केडीई रंग सुत्रयोजना"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "के-न्यु-स्टफ पॅकेज"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "के-वॉलेट पाकीट"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "कुगर रिपोर्ट नमूना"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "प्लाज्मोइड"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "सुपरकरंबा शैली"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "कॅलिग्रा प्लान परियोजना व्यवस्थापन दस्तऐवज"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "कॅलिग्रा प्लान कार्य पॅकेज दस्तऐवज"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "के-प्लेटो परियोजना व्यवस्थापन दस्तऐवज"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "के-प्लेटो परियोजना व्यवस्थापन कार्य पॅकेज"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "कुगर संग्रह"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "वेब संग्रह"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML स्कीमा"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "रियल ऑडिओ प्लगइन फाईल"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "के-फोटो-अल्बम आयात"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR प्रतिमा"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "केडीई रॉ इमेज फॉर्मेट"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® हेक्झाडेसिमल ऑब्जेक्ट फाईल"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "केट फाईल यादी लोड करणाऱ्या प्लगइनची यादी"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc संगीत नोटेशन फाईल"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "फॉन्ट पॅकेज"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "विंडोज सर्व्हर"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "विंडोज वर्कग्रूप"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "केडीई प्रणाली मॉनिटर"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "केडीई शैली"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "क्वांटा परियोजना"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "कमांडर फाईल"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "पोटेटो"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "कोल्फ साठवलेला खेळ"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "कोल्फ कोर्स"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "ओक्युलर दस्तऐवज संग्रह"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri आकृती"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "डॉ.जिओ आकृती"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "के-जिओ आकृती"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "किग आकृती"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "के-सेग दस्तऐवज"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "शब्द-संग्रह शिकवणारा दस्तऐवज"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "के-एम-प्लोट फाईल"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "के-वर्ड-क्वीझ शब्द-संग्रह"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind रूपरेषा डंप"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "अंब्रेलो UML मॉडेलर फाईल"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "विंडोज लिंक"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "के-गेट डाउनलोड यादी"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "कोपेट भावप्रतिमा संग्रह"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ संपर्क"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "मायक्रोसोफ्ट मीडिया पद्धत"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "टर्टल RDF दस्तऐवज"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "सोफ्टइमेज PIC प्रतिमा"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "क्यूटी मार्कअप भाषा फाईल"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# kdelibs4 Bahasa Melayu (Malay) (ms)
+# Copyright (C) 2008, 2009 K Desktop Environment
+# Hasbullah bin Pit <sebol@ikhlas.com>, 2003.
+# Muhammad Najmi Ahmad Zabidi <md_najmi@yahoo.com>, 2003.
+# Mohd Nasir bin Che Embee <chadtce@linuxmail.org>, 2003.
+# Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>, 2006.
+# Sharuzzaman Ahmat Raslan <sharuzzaman@myrealbox.com>, 2006, 2007, 2008, 2009, 2010.
+# Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>, 2010, 2011.
+# J Fudson <jackfudson@gmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-02-11 16:53+0800\n"
+"Last-Translator: J Fudson <jackfudson@gmail.com>\n"
+"Language-Team: Malay <kde-i18n-doc@kde.org>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 20.12.2\n"
+"Plural-Forms: nplurals=2; plural=1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Terma lesen untuk program ini tidak dinyatakan.\n"
+"Sila periksa dokumentasi atau sumber maklumat untuk terma lesen.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Program ini diedarkan di bawah terma %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Lesen BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Lesen BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Lesen Artistik"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Lesen Artistik"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Lesen Awam Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Tersendiri"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Tidak dinyatakan"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE diterjemahkan kepada pelbagai bahasa oleh pasukan penterjemah di "
+"serata dunia.</p><p>Untuk maklumat lanjut berkaitan pengantarabangsaan KDE, "
+"sila lawat http://i18n.kde.org</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Papar maklumat penulis."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Papar maklumat lesen."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Nama asas untuk fail kemasukan desktop untuk aplikasi ini."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nama fail"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Aplikasi ini ditulis oleh seseorang yang ingin kekal tanpa nama."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 ditulis oleh:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Sila guna http://bugs.kde.org untuk melaporkan pepijat."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Sila lapor pepijat ke %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Pustaka %1 tidak menawarkan KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1j%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1j%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1j%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 hari"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 jam"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minit"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 saat"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisaat"
+msgstr[1] "%n milisaat"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n hari"
+msgstr[1] "%n hari"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n jam"
+msgstr[1] "%n jam"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minit"
+msgstr[1] "%n minit"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n saat"
+msgstr[1] "%n saat"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 dan %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Tarikh Tidak Sah"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Dalam dua hari"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Esok"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hari ini"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Semalam"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Dua hari lalu"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Baru-baru Ini"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minit lalu"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Pautan %1 tidak wujud"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Gagal untuk melaksanakan `lsof' kod ralat %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob tidak disokong oleh Windows"
--- /dev/null
+# translation of xml_mimetypes.po to Malay
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2009-08-06 10:51+0800\n"
+"Last-Translator: Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>\n"
+"Language-Team: Malay <kedidiemas@yahoogroups.com>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Audio CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Imej HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Fail objek heksadesimal Intel(R)"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Figur Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Figur Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Figur Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Figur Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Kontak ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# Translation of kcoreaddons5_qt to Norwegian Bokmål
+#
+# Knut Yrvin <knut.yrvin@gmail.com>, 2002, 2003, 2004, 2005.
+# Bjørn Steensrud <bjornst@skogkatt.homelinux.org>, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015.
+# Eskild Hustvedt <zerodogg@skolelinux.no>, 2004, 2005.
+# Gaute Hvoslef Kvalnes <gaute@verdsveven.com>, 2004, 2005.
+# Axel Bojer <fri_programvare@bojer.no>, 2005, 2006.
+# Nils Kristian Tomren <slx@nilsk.net>, 2005, 2007.
+# Øyvind A. Holm <sunny@sunbase.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-02-28 03:44+0000\n"
+"PO-Revision-Date: 2015-02-24 20:40+0100\n"
+"Last-Translator: Bjørn Steensrud <bjornst@skogkatt.homelinux.org>\n"
+"Language-Team: Norwegian Bokmål <l10n-no@lister.huftis.org>\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Det er ikke oppgitt lisensbetingelser for dette programmet.\n"
+"Lisensbetingelsene kan være i dokumentasjonen eller kildekoden.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dette programmet er gitt ut under betingelsene i %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-lisens"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-lisens"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Kunstnerisk lisens"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Kunstnerisk lisens"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Tilpasset"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ikke oppgitt"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Vis forfatterinformasjon"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Viser lisensinformasjon"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Dette programmet ble skrevet av noen som ønsker å være anonyme."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ""
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteket %1 inneholder ikke en KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dager"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 timer"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutter"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekunder"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekund(er)"
+msgstr[1] "%n millisekund(er)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dag(er)"
+msgstr[1] "%n dag(er)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n time(r)"
+msgstr[1] "%n time(r)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minutt(er)"
+msgstr[1] "%n minutt(er)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekund(er)"
+msgstr[1] "%n sekund(er)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 og %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "I morgen"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "I dag"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "I går"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Translation of kde5_xml_mimetypes to Norwegian Bokmål
+#
+# Bjørn Steensrud <bjornst@skogkatt.homelinux.org>, 2009, 2010, 2011, 2012, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2014-03-16 10:59+0100\n"
+"Last-Translator: Bjørn Steensrud <bjornst@skogkatt.homelinux.org>\n"
+"Language-Team: Norwegian Bokmål <l10n-no@lister.huftis.org>\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# Translation of kdelibs4.po to Low Saxon
+# Heiko Evermann <heiko@evermann.de>, 2004.
+# Heiko Evermann <heiko.evermann@gmx.de>, 2004, 2005.
+# Volker Jockheck <volkae@gmx.net>, 2004.
+# Sönke Dibbern <s_dibbern@web.de>, 2004, 2005, 2006, 2007, 2008, 2009, 2014.
+# Manfred Wiese <m.j.wiese@web.de>, 2008, 2009, 2010, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2014-05-11 00:55+0200\n"
+"Last-Translator: Sönke Dibbern <s_dibbern@web.de>\n"
+"Language-Team: Low Saxon <kde-i18n-nds@kde.org>\n"
+"Language: nds\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"De Lizenz för dit Programm is nich angeven.\n"
+"Bitte kiek in de Dokmentatschoon oder in den Bornkode,\n"
+"wat dor över de Lizenz steiht.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dit Programm warrt ünner de Lizenz „%1“ verdeelt."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNUs Allmeen apen Verlööfnis, Verschoon 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNUs Lütter allmeen apen Verlööfnis, Verschoon 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-Verlööfnis"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-Verlööfnis"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Kunst-Verlööfnis"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Kunst-Verlööfnis"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Apen Q-Verlööfnis"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNUs Allmeen apen Verlööfnis, Verschoon 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNUs Lütter allmeen apen Verlööfnis, Verschoon 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNUs Lütter allmeen apen Verlööfnis, Verschoon 2"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Anner"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nich angeven"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE warrt na vele Spraken översett, dor an arbeidt Översetterkoppeln de "
+"hele Welt rund.</p><p>Mehr Informatschoon över dat Översetten vun KDE gifft "
+"dat op <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Informatschonen över den Autor wiesen"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Informatschonen över de Bruukverlööfnis wiesen"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Dateinaam-Fehler"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Dit Programm hett een schreven, de anonüm blieven will."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "%s was written by:\n"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%s wöör schreven vun:\n"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Bitte maak Fehlers op http://bugs.kde.org künniog.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Bitte maak Fehlers bi %1 künnig.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "De Bibliotheek „%1“ bargt keen „KPluginFactory“."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "nm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "OK"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kiy"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mai"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "Coptic weekday 4 - ShortDayName"
+#| msgid "Pti"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pti"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Bewerken"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Afschicken"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "vm"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1, %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 kB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1min %2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1min %2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h %2min"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h %2min %3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h %2min %3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 Daag"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 Stünnen"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 Minuten"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 Sekunnen"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n Millisekunn"
+msgstr[1] "%n Millisekunn"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n Dag"
+msgstr[1] "%n Dag"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n Stünn"
+msgstr[1] "%n Stünn"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n Minuut"
+msgstr[1] "%n Minuut"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n Sekunn"
+msgstr[1] "%n Sekunn"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 un %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Leeg Indrag"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n Dag"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Morgen"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Vundaag"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Güstern"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 Minuten"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 Klock %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Dat gifft de Datei \"%1\" nich."
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of xml_mimetypes.po to Low Saxon
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Manfred Wiese <m.j.wiese@web.de>, 2009, 2010, 2011.
+# Sönke Dibbern <s_dibbern@web.de>, 2009, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2014-02-26 22:34+0100\n"
+"Last-Translator: Sönke Dibbern <s_dibbern@web.de>\n"
+"Language-Team: Low Saxon <kde-i18n-nds@kde.org>\n"
+"Language: nds\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Klang-CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF-Pixelbild-Schriftoort"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java-Lüttprogramm"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Koppelsteed för KHTML-Verwiedern"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE-Klöörschema"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff-Paket"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet-Knipp"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar-Berichtvörlaag"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "Plasma-Lüttprogramm"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba-Muster"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Projektpleeg-Dokment för Calligra-Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Arbeitpaket-Dokment för Calligra-Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Projektpleeg-Dokment för KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Projektpleeg-Arbeitpaket för KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar-Archiev"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "Nettarchiev"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML-Schema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio-Moduuldatei"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum-Import"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR-Afbild"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE-Rohbildformaten"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "\"Intel® hexadezimaal\"-Objektdatei"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Dateilistlader-Moduullist för Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc-Musikschrift-Datei"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "Schriftoorden-Paket"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows-Server"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows-Arbeitkoppel"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE-Systeemwachter"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE-Muster"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta-Projekt"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander-Datei"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "Kantüffel"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Sekert Kolf-Speel"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf-Platz"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular-Dokmentenarchiev"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "\"Cabri\"-Grafik"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "\"Dr. Geo\"-Grafik"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo-Bild"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig-Grafik"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg-Dokment"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "Vokavel-Lehrdokment"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot-Datei"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz-Vokavelsett"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Profilutgaav för Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "UML-Modellmakerdatei för Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows-Link"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Daalladen-List för KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Snutenarchiev för Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ-Kontakt"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft-Medienformaat"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "RDF-Dokment för Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "PIC-Bild vun Softimage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt-Schriftsatzspraakdatei"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Nepali
+# Mahesh Subedi <submanesh@gmail.com>, 2006, 2007.
+# Shiva Prasad Pokharel <pokharelshiva@hotmail.com>, 2006, 2007.
+# shyam krishna ball <shyam@mpp.org.np>, 2006.
+# shyam krishna bal <shyamkrishna_bal@yahoo.com>, 2006, 2007.
+# Shiva Pokharel <shiva@mpp.org.np>, 2007.
+# Nabin Gautam <nabin@mpp.org.np>, 2007.
+# Shiva Prasad Pokharel <pokharelshiv@gmail.com>, 2007.
+# Shyam Krishna Bal <shyamkrishna_bal@yahoo.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2007-11-05 15:41+0545\n"
+"Last-Translator: Shyam Krishna Bal <shyamkrishna_bal@yahoo.com>\n"
+"Language-Team: Nepali <info@mpp.org.np>\n"
+"Language: ne\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n !=1\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"कार्यक्रमका लागि इजाजतपत्र शर्त निर्दिष्ट गरिएको छैन ।\n"
+"कृपया कुनै पनि इजाजतपत्र\n"
+"शर्तका लागि स्रोत वा कागजात जाँच गर्नुहोस् ।\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "यो कार्यक्रम %1 को शर्त अन्तर्गत वितरण गरिन्छ ।"
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU साधारण सार्वजनिक इजाजतपत्र संस्करण 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU साधारण सार्वजनिक इजाजतपत्र संस्करण 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD इजाजतपत्र"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD इजाजतपत्र"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "कलात्मक इजाजतपत्र"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "कलात्मक इजाजतपत्र"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q सार्वजनिक इजाजतपत्र"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU साधारण सार्वजनिक इजाजतपत्र संस्करण 2"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU साधारण सार्वजनिक इजाजतपत्र संस्करण 2"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU साधारण सार्वजनिक इजाजतपत्र संस्करण 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "अनुकूल"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "निर्दिष्ट नगरिएको"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>केडीई धेरै भाषामा अनुवाद गरिएको छ । संसार भरीका सबै अनुवादक समूहलाई कामका लागि "
+"धन्यवाद ।</p><p>केडीई अन्तराष्ट्रियकरणको बारेमा अधिक जानकारीका लागि यो साइट हेर्नुहोस् "
+"<a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "लेखक सूचना देखाउनुहोस्"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "इजाजतपत्र सूचना देखाउनुहोस्"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "फाइलनाम त्रुटि"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "यस अनुप्रयोगलाई नाम गोप्य राख्न चाहने व्यक्तिद्वारा लेखिएको हो ।"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 लाई\n"
+"%2 द्वारा लेखियो"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "कृपया बग प्रतिवेदन गर्न http://bugs.kde.org प्रयोग गर्नुहोस् ।\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "कृपया %1 मा बग प्रतिवेदन गर्नुहोस् ।\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 लाइब्रेरीले केडीई ४ मिल्दो कारखाना प्रस्ताव गर्दैन ।"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "पूर्वान्ह"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "अपरान्ह"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "पूर्वान्ह"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "ठीक छ"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "खा"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "मे"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "सम्पादन गर्नुहोस्"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "पेश गर्नुहोस्"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "पूर्वान्ह"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 दिन"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 घण्टा"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 मिनेट"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 सेकेन्ड"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 मिलिसेकेन्ड"
+msgstr[1] "%1 मिलिसेकेन्ड"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 दिन"
+msgstr[1] "%1 दिन"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 घण्टा"
+msgstr[1] "%1 घण्टा"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 मिनेट"
+msgstr[1] "%1 मिनेट"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 सेकेन्ड"
+msgstr[1] "%1 सेकेन्ड"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "अवैध फाइल नाम"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 दिन"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "आज"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "हिजो"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 मिनेट"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 फाइल फेला परेन ।"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Dutch
+# Copyright (C) 2000,2001,2002,2003, 2004 KDE e.v..
+# KTranslator Generated File
+# Nederlandse vertaling van kdelibs.
+# KDE-vertaalgroep Nederlands <i18n@kde.nl>, 2000, 2001, 2002.
+# Rinse de Vries <rinsedevries@kde.nl>,2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009.
+# Wilbert Berendsen <wbsoft@xs4all.nl>, 2003, 2004.
+# Bram Schoenmakers <bramschoenmakers@kde.nl>, 2004, 2005, 2006, 2007.
+# Tom Albers <tomalbers@kde.nl>, 2004.
+# Sander Koning <sanderkoning@kde.nl>, 2005.
+# Tijmen Baarda <tijmenbaarda@kde.nl>, 2005.
+# Kristof Bal <kristof.bal@gmail.com>, 2008, 2009.
+# Freek de Kruijf <freekdekruijf@kde.nl>, 2009, 2010, 2011, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-11-17 14:28+0100\n"
+"Last-Translator: Freek de Kruijf <freekdekruijf@kde.nl>\n"
+"Language-Team: Dutch <kde-i18n-nl@kde.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Files: kfarch.cpp kfdird.cpp kfind.cpp kfindtop.cpp kfoptions.cpp kfsave.cpp "
+"kftabdlg.cpp kftypes.cpp kfwin.cpp main.cpp mkfdird.cpp mkfind.cpp\n"
+"X-Generator: Lokalize 20.08.3\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Er zijn geen licentievoorwaarden voor dit programma bekend.\n"
+"Consulteer de documentatie of de broncode voor licentie-\n"
+"voorwaarden.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dit programma wordt verspreid onder de voorwaarden van de %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License versie 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License, versie 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-licentie"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-licentie"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic-licentie"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic-licentie"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License versie 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License, versie 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Aangepast"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Niet gespecificeerd"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE is in veel verschillende talen beschikbaar dankzij de inzet van de "
+"vele vertaalteams wereldwijd.</p><p>Kijk voor meer informatie op de "
+"Nederlandstalige KDE-pagina <a href=\"https://www.kde.nl\">https://www.kde."
+"nl</a>. Algemene informatie over de vertaling van KDE is te vinden op <a "
+"href=\"https://l10n.kde.org\">https://l10n.kde.org</a>.</p><p>Komt u een "
+"foutje tegen in een vertaling? Meld dit op <a href=\"https://www.kde.nl/bugs"
+"\">https://www.kde.nl/bugs</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Auteurinformatie tonen."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Licentie-informatie tonen."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "De basis bestandsnaam van het desktop-item voor deze toepassing."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "bestandsnaam"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Deze toepassing werd geschreven door iemand die anoniem wenst te blijven."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 werd geschreven door:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Gebruik https://bugs.kde.org om bugs (programmafouten) te rapporteren."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Rapporteer bugs aan %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "De bibliotheek %1 biedt geen KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dagen"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 uren"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuten"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 seconden"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milliseconde(n)"
+msgstr[1] "%n milliseconde(n)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dag(en)"
+msgstr[1] "%n dag(en)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n u(u)r(en)"
+msgstr[1] "%n u(u)r(en)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minu(u)te(n)"
+msgstr[1] "%n minu(u)te(n)"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n seconde(n)"
+msgstr[1] "%n seconde(n)"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 en %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ongeldige datum"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "In twee dagen"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Morgen"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Vandaag"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Gisteren"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Twee dagen geleden"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Op dit moment"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minuten geleden"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Pad %1 bestaat niet"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Uitvoeren van `lsof' is mislukt foutcode %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob wordt niet ondersteund op Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Freek de Kruijf <freekdekruijf@kde.nl>, 2014, 2017, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-26 17:56+0100\n"
+"Last-Translator: Freek de Kruijf <freekdekruijf@kde.nl>\n"
+"Language-Team: Dutch <kde-i18n-nl@kde.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 20.08.2\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD-audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF-bitmap-lettertype"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java-applet"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML-extensie aanpassen"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE-kleurenschema"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff-pakket"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet-portefeuille"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar-rapportsjabloon"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba-thema"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra-plan projectbeheer-document"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra-plan werkpakket document"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato projectbeheer-document"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato projectbeheer-werkpakket"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar-archief"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "webarchief"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML-schema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio-bestand"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum-import"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR-image"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE-rawimage-formats"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® hexadecimaal objectbestand"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate bestandenlijstlader voor pluginlijst"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc-muzieknotatiebestand"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "lettertypenpakket"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows-server"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows-werkgroep"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE systeembewaking"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE-thema"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta-project"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander-bestand"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "aardappel"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Opgeslagen Kolf-spel"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf-baan"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular-documentarchief"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri-figuur"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo-figuur"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo-figuur"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig-figuur"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg-document"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "document voor woordenschattrainer"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot-bestand"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz-woordenschat"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind profieldump"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML Modeller-bestand"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows-koppeling"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet-downloadlijst"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete emoticon-archief"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ-contact"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft mediaformaat"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF-document"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC-image"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt Markup Language-bestand"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Configuratie-opties van KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Codegeneratie-opties van KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Declaratie van KXMLGUI UI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Declaratie van KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Rapport van KCrash"
--- /dev/null
+# Translation of kcoreaddons5_qt to Norwegian Nynorsk
+#
+# Gaute Hvoslef Kvalnes <gaute@verdsveven.com>, 2003, 2004, 2005, 2006.
+# Håvard Korsvoll <korsvoll@skulelinux.no>, 2003, 2005.
+# Karl Ove Hufthammer <karl@huftis.org>, 2004, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021.
+# Eirik U. Birkeland <eirbir@gmail.com>, 2008, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-02-28 03:44+0000\n"
+"PO-Revision-Date: 2021-02-14 15:57+0100\n"
+"Last-Translator: Karl Ove Hufthammer <karl@huftis.org>\n"
+"Language-Team: Norwegian Nynorsk <l10n-no@lister.huftis.org>\n"
+"Language: nn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 20.12.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Dette programmet har ikkje oppgjeve lisensvilkår.\n"
+"Du finn kanskje lisensvilkåra i hjelpeteksten\n"
+"eller kjeldekoden.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dette programmet er distribuert etter vilkåra i %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License versjon 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License versjon 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-lisensen"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-lisensen"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic-lisensen"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic-lisensen"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License versjon 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License versjon 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License versjon 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Tilpassa"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ikkje oppgjevne"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE-programma er omsette til mange språk, og dei var nokre av dei første "
+"store programma som fanst på nynorsk.</p><p>Viss du finn skrivefeil, feil"
+"omsetjingar eller omsetjingar som kan forbetrast, set me pris på om du <a "
+"href=\"https://bugs.kde.org/enter_bug.cgi?product=i18n&component=nn"
+"\">melder det inn i feilsporingssystemet vårt</a>. Du kan òg senda eit tips "
+"til <a href=\"mailto:l10n-no@lister.huftis.org\">diskusjonslista</a> vår (<a "
+"href=\"http://lister.huftis.org/listinfo.cgi/l10n-no-huftis.org"
+"\">informasjon og arkiv</a>), eller direkte til <a href=\"mailto:karl@huftis."
+"org\">Karl Ove Hufthammer</a> dersom du ikkje ønskjer at meldinga di skal "
+"verta offentleggjord på lista.</p><p>Bruk dei same adressene viss du ønskjer "
+"å delta aktivt i nynorskomsetjinga av programma. Me har alltid bruk for nye "
+"omsetjarar og korrekturlesarar!</p><p>Du finn meir informasjon om "
+"internasjonalisering av KDE-programma på <a href=\"https://l10n.kde.org/"
+"\">https://l10n.kde.org/</a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Vis forfattarinformasjon."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Vis lisensinformasjon."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Filnamn-stamme til skrivebordsoppføringa til programmet."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "filnamn"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Dette programmet er skrive av nokon som vil vera anonyme."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 er skrive av:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Bruk https://bugs.kde.org/ for å melda frå om feil."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Send feilrapportar til %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteket %1 tilbyr ikkje ein KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1t%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1t%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1t%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dagar"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 timar"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutt"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekund"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekund"
+msgstr[1] "%n millisekund"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dag"
+msgstr[1] "%n dagar"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n time"
+msgstr[1] "%n timar"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minutt"
+msgstr[1] "%n minutt"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekund"
+msgstr[1] "%n sekund"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 og %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ugyldig dato"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Om to dagar"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "I morgon"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "I dag"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "I går"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "For to dagar sidan"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Nett no"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minutt sidan"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Adressa %1 finst ikkje"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Klarte ikkje køyra «lsof». Feilkode: %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob er ikkje støtta på Windows"
--- /dev/null
+# Translation of kde5_xml_mimetypes to Norwegian Nynorsk
+#
+# Karl Ove Hufthammer <karl@huftis.org>, 2009, 2015, 2018, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-29 19:40+0100\n"
+"Last-Translator: Karl Ove Hufthammer <karl@huftis.org>\n"
+"Language-Team: Norwegian Nynorsk <l10n-no@lister.huftis.org>\n"
+"Language: nn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 20.08.2\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD-lyd"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF-punktskrift"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java-applett"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML-utvidingstilpassar"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE-fargetema"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff-pakke"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet-lommebok"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Rapportmal for Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoide"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba-tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Prosjekthandsamingsdokument for Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Arbeidspakkedokument for Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato-prosjekthandsamingsdokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato-prosjekthandsamingsarbeidspakke"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar-arkiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "vevarkiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML-skjema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio-programtilleggfil"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum-import"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR-bilete"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE-råbilete"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel®-heksobjektfil"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Programtilleggliste for filliste-lastar i Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc-musikknotasjonsfil"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "skriftpakke"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows-tenar"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows-arbeidsgruppe"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE-systemovervaking"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE-tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta-prosjekt"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander-fil"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Lagra Kolf-runde"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf-bane"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular-dokumentarkiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg-dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "ordtreningsdokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot-fil"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz-vokabular"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind-profildump"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML Modeller-fil"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows-lenkje"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet-nedlastingsliste"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Fjesingtema for Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ-kontakt"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media-format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF-dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC-bilete"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt-oppmerkingsspråk"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT-oppsett"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT-kodegeneringsval"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI UI-deklarasjon"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification-deklarasjon"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash-rapport"
--- /dev/null
+# translation of kdelibs4.po to Occitan
+# Copyright (C) 2008 This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Yannig Marchegay (Kokoyaya) <yannig@marchegay.org>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-08-06 00:07+0200\n"
+"Last-Translator: \n"
+"Language-Team: Occitan <oc@li.org>\n"
+"Language: oc\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Cap de licéncia es pas estada especificada per aqueste programa.\n"
+"Consultatz la documentacion o lo còde font\n"
+"per trobar los tèrmes eventuals de la licéncia.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Aqueste programa es distribuit segon los tèrmes de la %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licéncia :"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licéncia :"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr ""
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizat"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Non especificat"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Visualizar las informacions de l'autor"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Visualizar las informacions de licéncia"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 foguèt escrich per\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid ""
+#| "Please use <a href=\"http://bugs.kde.org\">http://bugs.kde.org</a> to "
+#| "report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Utilizatz <a href=\"http://bugs.kde.org\">http://bugs.kde.org</a> per "
+"senhalar de bògues.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to <a href=\"mailto:%1\">%2</a>.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Senhalatz los bògues a <a href=\"mailto:%1\">%2</a>.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mai"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Edicion"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Sometre"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 ko"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 o"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 ko"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 Mo"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 Go"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 To"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 To"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 To"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 To"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 To"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 jorns"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 oras"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segondas"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisegondas"
+msgstr[1] "%1 milisegondas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 jorns"
+msgstr[1] "%1 jorns"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 oras"
+msgstr[1] "%1 oras"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minutas"
+msgstr[1] "%1 minutas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 segondas"
+msgstr[1] "%1 segondas"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "URL invalida"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 jorns"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Uèi"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ièr"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minutas"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Oriya
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Manoj Kumar Giri <giri.manojkr@gmail.com>, 2008.
+# Manoj Kumar Giri <mgiri@redhat.com>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-01-02 17:37+0530\n"
+"Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n"
+"Language-Team: Oriya <oriya-it@googlegroups.com>\n"
+"Language: or\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ଏହି ପ୍ରଗ୍ରାମଟି %1 ର ନିୟମାନୁସାରେ ବଣ୍ଟାଯାଇଥାଏ।"
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD ପ୍ରମାଣ ପତ୍ର"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD ପ୍ରମାଣ ପତ୍ର"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic ପ୍ରମାଣ ପତ୍ର"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic ପ୍ରମାଣ ପତ୍ର"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q ସାର୍ବଜନୀନ ପ୍ରମାଣ ପତ୍ର"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ଇଚ୍ଛାରୂପଣ"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "ଦର୍ଶାଯାଇନାହିଁ"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "ଲେଖକ ସୂଚନା ଦର୍ଶାନ୍ତୁ"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "ଅନୁମତି ପତ୍ର ସୂଚନା ଦର୍ଶାନ୍ତୁ"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ଏହି ପ୍ରୟୋଗଟି ଜଣକ ଦ୍ୱାରା ଲିଖିତ ଯିଏକି ଅଜ୍ଞାତ ହୋଇ ରହିବାକୁ ଚାହୁଁଅଛି।"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ଟି %2 ଦ୍ୱାରା \n"
+"ଲିଖିତ"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "ଦୟାକରି ତ୍ରୁଟି ପ୍ରକାଶ କରିବା ପାଇଁ http://bugs.kde.org କୁ ବ୍ୟବହାର କରନ୍ତୁ।\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "ଦୟାକରି %1 ରେ ତ୍ରୁଟି ପ୍ରକାଶ କରନ୍ତୁ।\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "ଲାଇବ୍ରେରୀ %1 KDE 4 ସୁସଙ୍ଗତ କାରଖାନା ପ୍ରଦାନ କରେନାହିଁ।"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "ପୂର୍ବାହ୍ନ"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ଅପରାହ୍ନ"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "ପୂର୍ବାହ୍ନ"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "ଖା"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "May"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ତିର"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "ସମ୍ପାଦନ କରନ୍ତୁ"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ଦାଖଲ କରନ୍ତୁ"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "ପୂର୍ବାହ୍ନ"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KiB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MiB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GiB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TiB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ଦିନ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ଘଣ୍ଟା"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 ମିନଟ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 ସେକଣ୍ଡ"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 ମିଲିସେକଣ୍ଡ"
+msgstr[1] "%1 ମିଲିସେକଣ୍ଡ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 ଦିନ"
+msgstr[1] "%1 ଦିନ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ଘଣ୍ଟା"
+msgstr[1] "%1 ଘଣ୍ଟା"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 ମିନଟ"
+msgstr[1] "%1 ମିନଟ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 ସେକଣ୍ଡ"
+msgstr[1] "%1 ସେକଣ୍ଡ"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ଏବଂ %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgctxt "@item Calendar system"
+#| msgid "Invalid Calendar Type"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ଅବୈଧ କାଲେଣ୍ଡର ଟାଇପ"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 ଦିନ"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ଆଜି"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ଗତକାଲି"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 ମିନଟ"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "ଫାଇଲ %1 ଅବସ୍ଥିତ ନାହିଁ"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Punjabi
+# Punjabi translation of kdelibs.
+# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# Amanpreet Singh Alam <amanlinux@netscape.net>, 2004.
+# Amanpreet Singh Alam <amanlinux@netscpe.net>, 2004.
+# A S Alam <aalam@users.sf.net>, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012.
+# ASB <aalam@users.sf.net>, 2007.
+# Amanpreet Singh Alam <apreet.alam@gmail.com>, 2008.
+# Amanpreet Singh <aalam@users.sf.net>, 2008.
+# Amanpreet Singh Alam <aalam@users.sf.net>, 2008, 2009, 2013, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2014-07-08 14:24-0500\n"
+"Last-Translator: A S Alam <aalam@users.sf.net>\n"
+"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
+"Language: pa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ਇਸ ਪਰੋਗਰਾਮ ਲਈ ਕੋਈ ਲਾਈਸੈਂਸ ਸ਼ਰਤ ਨਹੀ ਦਿੱਤੀ ਗਈ ਹੈ।\n"
+"ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ ਇਸ ਦੇ ਸਰੋਤ ਜਾਂ ਡੌਕੂਮੈਂਟ\n"
+"ਦੀ ਜਾਂਚ ਕਰੋ ਜੀ।\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ਇਹ ਪਰੋਗਰਾਮ %1 ਦੀਆਂ ਸ਼ਰਤਾਂ ਅਧੀਨ ਜਾਰੀ ਕੀਤਾ ਗਿਆ ਹੈ।"
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU ਜਰਨਲ ਪਬਲਿਕ ਲਾਈਸੈਂਸ ਵਰਜਨ 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU ਲੈਸਰ ਜਰਨਲ ਪਬਲਿਕ ਲਾਈਸੈਂਸ ਵਰਜਨ 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD ਲਾਈਸੈਂਸ"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD ਲਾਈਸੈਂਸ"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "ਆਰਟੈਸਟਿਕ ਲਾਈਸੈਂਸ"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "ਆਰਟੈਸਟਿਕ ਲਾਈਸੈਂਸ"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q ਪਬਲਿਕ ਲਾਈਸੈਂਸ"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU ਜਰਨਲ ਪਬਲਿਕ ਲਾਈਸੈਂਸ ਵਰਜਨ 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU ਲੈਸਰ ਜਰਨਲ ਪਬਲਿਕ ਲਾਈਸੈਂਸ ਵਰਜਨ 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "KAboutLicense|@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU ਲੈਸਰ ਜਰਨਲ ਪਬਲਿਕ ਲਾਈਸੈਂਸ ਵਰਜਨ 2"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ਕਸਟਮ"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "ਦਿੱਤਾ ਨਹੀਂ"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt ""
+#| "KAboutData|replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>ਓਪਨ ਸਰੋਤ ਸਾਫਟਵੇਅਰਾਂ, KDE ਦੇ ਪੰਜਾਬੀ ਵਿੱਚ ਅਨੁਵਾਦ</p><p> ਦਾ ਕੰਮ ਪੰਜਾਬੀ ਓਪਨ ਸੋਰਸ ਟੀਮ "
+"(P(unjabi) O(pen) S(ource) T(eam)) (ਮੋਗਾ) ਨੇ </p> <p>ਅਮਨਪਰੀਤ ਸਿੰਘ ਆਲਮਵਾਲਾ ਅਤੇ "
+"ਜਸਵਿੰਦਰ ਸਿੰਘ ਫੂਲੇਵਾਲਾ</p> <p>ਦੀ ਅਗਵਾਈ ਹੇਠ ਕੀਤਾ ਹੈ।</p><p>ਆਪਣੀ ਬੋਲੀ ਆਪਣੀ ਮਾਣ</"
+"p><p>ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ <a href=\"https://code.google.com/p/gurmukhi/\">ਪਰੋਜੈਕਟ "
+"ਸਾਇਟ</a> ਵੇਖੋ।</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "ਲੇਖਕ ਜਾਣਕਾਰੀ ਵੇਖੋ"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "ਲਾਈਸੈਂਸ ਜਾਣਕਾਰੀ ਵੇਖੋ"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ਇਸ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਉਸਨੇ ਲਿਖਿਆ ਹੈ, ਜੋ ਕਿ ਬੇਪਛਾਣ ਰਹਿਣਾ ਚਾਹੁੰਦਾ ਹੈ।"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "%s was written by:\n"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%s ਨੂੰ ਲਿਖਿਆ\n"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "ਬੱਗ ਦੀ ਜਾਣਕਾਰੀ ਦੇਣ ਲਈ http://bugs.kde.org ਵਰਤੋਂ।\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "ਬੱਗ ਦੀ ਜਾਣਕਾਰੀ ਦੇਣ ਲਈ %1 ਵਰਤੋਂ।\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "ਸਵੇਰੇ"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ਸ਼ਾਮ"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "ਸਵੇਰੇ"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "ਖਾ"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "ਸਵੇਰ"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "ਮਈ"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ਟੀਰ"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "ਸੋਧ"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ਭੇਜੋ"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "ਸਵੇਰੇ"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ਦਿਨ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ਘੰਟੇ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 ਮਿੰਟ"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 ਸਕਿੰਟ"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n millisecond(s)"
+#| msgid_plural "%n millisecond(s)"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n ਮਿਲੀ-ਸਕਿੰਟ"
+msgstr[1] "%n ਮਿਲੀ-ਸਕਿੰਟ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n ਦਿਨ"
+msgstr[1] "%n ਦਿਨ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n hour(s)"
+#| msgid_plural "%n hour(s)"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n ਘੰਟੇ"
+msgstr[1] "%n ਘੰਟੇ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n minute(s)"
+#| msgid_plural "%n minute(s)"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n ਮਿੰਟ"
+msgstr[1] "%n ਮਿੰਟ"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%n second(s)"
+#| msgid_plural "%n second(s)"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n ਸਕਿੰਟ"
+msgstr[1] "%n ਸਕਿੰਟ"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ਤੇ %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ਗਲਤ ਆਈਟਮ।"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n ਦਿਨ"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "ਭਲਕ"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ਅੱਜ"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ਕੱਲ੍ਹ"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 ਮਿੰਟ"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "ਫਾਈਲ %1 ਮੌਜੂਦ ਨਹੀਂ ਹੈ"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# A S Alam <aalam@users.sf.net>, 2009, 2010, 2012, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2014-03-26 11:34-0500\n"
+"Last-Translator: A S Alam <aalam@users.sf.net>\n"
+"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
+"Language: pa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD ਆਡੀਓ"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF ਬਿੱਟਮੈਪ ਫੋਂਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "ਜਾਵਾ ਐਪਲਿਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML ਇਕਸਟੈਨਸ਼ਨ ਅਡੋਪਟਰ"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE ਰੰਗ ਸਕੀਮ"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff ਪੈਕੇਜ"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet ਵਾਲਿਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar ਰਿਪੋਰਟ ਟੈਪਲੇਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "ਪਲਾਜ਼ਮੋਡ"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "ਸੁਪਰਕਰਾਮਬਾ ਥੀਮ"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra ਸਕੀਮ ਪ੍ਰੋਜੈਕਟ ਪਰਬੰਧ ਡੌਕੂਮੈਂਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra ਸਕੀਮ ਪ੍ਰੋਜੈਕਟ ਪਰਬੰਧ ਡੌਕੂਮੈਂਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato ਪਰੋਜੈਕਟ ਪਰਬੰਧ ਡੌਕੂਮੈਂਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato ਪਰੋਜੈਕਟ ਮੈਨੇਜਮੈਂਟ ਵਰਕ ਪੈਕੇਜ"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar ਅਕਾਇਵ"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "ਵੈੱਬ ਅਕਾਇਵ"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML ਸਕੀਮਾ"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio ਪਲੱਗਇਨ ਫਾਈਲ"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum ਇੰਪੋਰਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR ਚਿੱਤਰ"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE ਰਾਅ ਚਿੱਤਰ ਫਾਰਮੈਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® ਹੈਕਸਾਡੈਸੀਮਲ ਆਬਜੈਕਟ ਫਾਈਲ"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "ਕੇਟ ਫਾਈਲ ਲਿਸਟ ਲੋਡਰ ਪਲੱਗਇਨ ਲਿਸਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "ਫੋਂਟ ਪੈਕੇਜ"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "ਵਿੰਡੋਜ਼ ਸਰਵਰ"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "ਵਿੰਡੋਜ਼ ਵਰਕਗਰੁੱਪ"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE ਸਿਸਟਮ ਮਾਨੀਟਰ"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE ਥੀਮ"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "ਕੁਆਂਟਾ ਪਰੋਜੈਕਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander ਫਾਈਲ"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "ਆਲੂ"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf ਸੰਭਾਲੀ ਖੇਡ"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf ਕੋਰਸ"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "ਓਕੁਲਾਰ ਡੌਕੂਮੈਂਟ ਅਕਾਇਵ"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri ਸ਼ਕਲ"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo ਸ਼ਕਲ"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo ਸ਼ਕਲ"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig ਸ਼ਕਲ"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg ਡੌਕੂਮੈਂਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "ਸ਼ਬਦਕੋਸ਼ ਟਰੇਨਰ ਡੌਕੂਮੈਂਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot ਫਾਈਲ"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind ਪਰੋਫਾਈਲ ਡੰਪ"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "ਵਿੰਡੋਜ਼ ਲਿੰਕ"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet ਡਾਊਨਲੋਡ ਲਿਸਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "ਕੋਪਟੀ ਈਮੋਸ਼ਨ ਅਕਾਇਵ"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ ਸੰਪਰਕ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft ਮੀਡਿਆ ਫਾਰਮੈਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF ਡੌਕੂਮੈਂਟ"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Polish
+# translation of kdelibs4.po to
+# Version: $Revision: 685926 $
+# Ostatnie poprawki przed 2.0 Jacek Stolarczyk <jstolarz@kde.org>
+# Jacek Stolarczyk <jstolarz@kde.org>, 2001.
+# Piotr Roszatycki <dexter@debian.org>, 1997-2000.
+# Artur Górniak <artur_gorniak@software.pl>, 2000.
+# Michał Rudolf <mrudolf@kdewebdev.org>, 2002.
+# Michal Rudolf <mrudolf@kdewebdev.org>, 2002,2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
+# Krzysztof Lichota <lichota@mimuw.edu.pl>, 2005, 2006.
+# Marta Rybczyńska <kde-i18n@rybczynska.net>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Michal Rudolf <michal@rudolf.waw.pl>, 2010.
+# Artur Chłond <eugenewolfe@o2.pl>, 2010.
+# Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-03-27 08:20+0100\n"
+"Last-Translator: Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>\n"
+"Language-Team: Polish <kde-i18n-doc@kde.org>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 20.12.1\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Dla tego programu nie zostały określone warunki licencji.\n"
+"Proszę sprawdzić dokumentację lub źródła tego programu, aby\n"
+"znaleźć licencję.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Program ten jest rozpowszechniany na warunkach licencji %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License wersja 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU General Public License wersja 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licencja BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licencja BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licencja Artistic"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licencja Artistic"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License wersja 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License wersja 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Powszechna Licencja Publiczna w wersji 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Inna"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nieokreślona"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE jest tłumaczone na polski w czasie wolnym ludzi, chcących ten czas "
+"poświecić.</p><p>Tłumaczenie może zawierać <b>błędy</b>. Jeśli znalazłaś/"
+"znalazłeś taki błąd, to powiadom nas o tym, wysyłając wiadomość na adres <a "
+"href=\"mailto:kdei18n-pl-uwagi@lists.sourceforge.net\"> kdei18n-pl-"
+"uwagi@lists.sourceforge.net</a> (wystarczy, że wyślesz wiadomość; nie musisz "
+"się nigdzie zapisywać).</p><p>Zapraszamy również do współudziału w "
+"tłumaczeniu! Aby się zgłosić wyślij wiadomość na adres <a href=\"mailto:"
+"kdei18n-pl-devel@lists.sourceforge.net\"> kdei18n-pl-devel@lists.sourceforge."
+"net</a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Pokaż informacje o autorze."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Pokaż informacje o licencji."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Podstawa nazwy pliku elementu pulpitu dla tej aplikacji."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nazwa pliku"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Ten program został napisany przez kogoś, kto chciał pozostać anonimowy."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 został napisany przez:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Błędy zgłaszaj na https://bugs.kde.org."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Błędy zgłaszaj na %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka %1 nie zapewnia KPluginFactory"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dni"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 godzin"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minut"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekund"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekundy"
+msgstr[2] "%n milisekund"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dzień"
+msgstr[1] "%n dni"
+msgstr[2] "%n dni"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n godzina"
+msgstr[1] "%n godziny"
+msgstr[2] "%n godzin"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuta"
+msgstr[1] "%n minuty"
+msgstr[2] "%n minut"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekundy"
+msgstr[2] "%n sekund"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Nieprawidłowa data"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Za dwa dni"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Jutro"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Dzisiaj"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Wczoraj"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Dwa dni temu"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Teraz"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minuty temu"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Ścieżka %1 nie istnieje"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Nie udało się wykonać `lsof'. Kod błędu %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob nie jest obsługiwany na Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Marta Rybczyńska <kde-i18n@rybczynska.net>, 2009, 2010, 2011.
+# Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>, 2011, 2014, 2017, 2020, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-01-09 09:10+0100\n"
+"Last-Translator: Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>\n"
+"Language-Team: Polish <kde-i18n-doc@kde.org>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 20.12.1\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Płyta CD z dźwiękiem"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Czcionka bitmapowa SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Aplet Javy"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adapter rozszerzeń KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Zestaw kolorów KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Pakiet KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Portfel KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Szablon raportu Kugara"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plazmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Wygląd SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Dokument zarządzania projektami w Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Dokument zawierający pakiet zadań Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Dokument zarządzania projektami w KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Pakiet pracy dot. zarządzania projektami KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Archiwum Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "archiwum sieciowe"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Schemat W3C XML"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Plik wtyczki RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Import KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Obraz HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formaty nieprzetworzonych obrazów w KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Szesnastkowy plik obiektowy Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Lista wtyczki do wczytywania plików Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "plik zapisu muzyki abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "zestaw czcionek"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Serwer Windowsa"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Grupa robocza Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Monitor systemowy KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Wygląd KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Projekt Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Plik Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "ziemniak"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Zapisana gra Kolfa"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Pole golfowe Kolfa"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Archiwum dokumentu Okulara"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Rysunek Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Rysunek Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Rysunek KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Rysunek Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Dokument KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "dokument do ćwiczenia słownictwa"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Plik KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Słownictwo KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Zrzut profilu Cachegrinda/Callgrinda"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Plik programu modelującego Umbrello UML"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Odnośnik Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Lista pobierania KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Archiwum emotikon Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Kontakt ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Dokument Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Obraz Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Plik języka znaczników dla Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Ustawienia KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Ustawienia do tworzenia kodu KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Deklaracja KXMLGUI UI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Deklaracja KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Zgłoszenie KCrash"
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the Kde package.
+# Zabeeh Khan <zabeehkhan@gmail.com>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-08-16 16:01-0800\n"
+"Last-Translator: Zabeeh Khan <zabeehkhan@gmail.com>\n"
+"Language-Team: Pashto <pathanisation@googlegroups.com>\n"
+"Language: ps\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: Pashto, Pushto\n"
+"X-Poedit-Country: AFGHANISTAN\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"دې کړنلار لپاره کوم منښتليک توکي نه دي ټاکل شوي.\n"
+"لورينه وکړﺉ د منښتليک توکو لپاره لاسوندونه يا\n"
+"سرچينه وګورﺉ.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr ".د توکو له مخې وېشل کيږي %1 دا کړنلار د"
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "ج.پ.ل ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "د ج.ن.ي ټولګړی منښتليک ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "ل.ج.پ.ل ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "د ج.ن.ي کوچنی ټولګړی منښتليک ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "ب.س.ډ منښتليک"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "ب.س.ډ منښتليک"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "کلاکاريز منښتليک"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "کلاکاريز منښتليک"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "ک.پ.ل ۱.۰مه نسخه"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "ک ټولګړی منښتليک"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "ګ.پ.ل ۳مه نسخه"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "د ج.ن.ي ټولګړی منښتليک ۳مه نسخه"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "ل.ګ.پ.ل ۳مه نسخه"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "د ج.ن.ي کوچنی ټولګړی منښتليک ۳مه نسخه"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "ل.ج.پ.ل ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "د ج.ن.ي کوچنی ټولګړی منښتليک ۲مه نسخه"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "دوديز"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "نه دی ټاکل شوی"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>کډي ډېرو ژبو ته ژباړل شوې ده. د ټولې نړۍ د ژباړه ډلو نه ډېره مننه.</"
+"p><p>د کډي د نړېوالونې په اړه د نورو خبرتياو لپاره وګورﺉ<a href=\"http://"
+"l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "د ليکوال خبرتياوې ښودل"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "د منښتليک خبرتياوې ښودل"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "د دوتنه نوم تېروتنه"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "دا کاريال د يو داسې وګړي لخوا جوړ شوی چې خپل نوم ښودل نه غواړي."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"ليکلی وو %1\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ".وکاروﺉ http://bugs.kde.org لورينه وکړﺉ د کړاونو راپورولو لپاره\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ".ته راپور کړﺉ %1 لورينه وکړﺉ کړاونه\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library does not export a factory for creating components."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "کتابون د رغتوکو جوړولو لپاره فېکټري نه بهروي."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "غ.م"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "غ.و"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "غ.م"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "پينځه نۍ"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "د می"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "تير"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "سمون"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "لېږل"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "غ.م"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "ب %1"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "ب %1"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "م ا ب %1"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "ج ا ب %1"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "ټ ا ب %1"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "ب %1"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "ب %1"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "ب %1"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "ب %1"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "ب %1"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "ک ا ب %1"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "م ا ب %1"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "ج ا ب %1"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "ټ ا ب %1"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "ب %1"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "ب %1"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "ب %1"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "ب %1"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "ب %1"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "ک ا ب %1"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "م ا ب %1"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "ج ا ب %1"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "ټ ا ب %1"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "ټ ا ب %1"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "ټ ا ب %1"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "ټ ا ب %1"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "ټ ا ب %1"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "ورځې %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "ګېنټې %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "مېنټه %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "سېکېنډه %1"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgid "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "مېلېسېکېنډه %1"
+msgstr[1] "مېلېسېکېنډه %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "ورځې %1"
+msgstr[1] "ورځې %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "ګېنټې %1"
+msgstr[1] "ګېنټې %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "مېنټه %1"
+msgstr[1] "مېنټه %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "سېکېنډه %1"
+msgstr[1] "سېکېنډه %1"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%2 او %1"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ناسم دوتنه نومونه"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "ورځې %1"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "نن"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "پرون"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "مېنټه %1"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "دوتنه شتون نه لري %1"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-11-17 10:09+0000\n"
+"Last-Translator: José Nuno Pires <zepires@gmail.com>\n"
+"Language-Team: pt <kde-i18n-pt@kde.org>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POFile-IgnoreConsistency: &Discard\n"
+"X-POFile-IgnoreConsistency: Enter\n"
+"X-POFile-IgnoreConsistency: Author\n"
+"X-POFile-IgnoreConsistency: Open &File\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-POFile-Allow: 2\n"
+"X-POFile-IgnoreConsistency: Far\n"
+"X-POFile-SpellExtra: Hspell Koenig KHTML Thaana Telugu KScript Sycoca\n"
+"X-POFile-SpellExtra: artsmessage KDEInit SOCKS kcmkresources\n"
+"X-POFile-SpellExtra: ChavePrivadaFalhou KIOTest Han Thaani Jumaada Hangul\n"
+"X-POFile-SpellExtra: Cherokee Meh KSpell chaveSessao TestWritevCard\n"
+"X-POFile-SpellExtra: Thulatha Javascript Tagbanwa End Tagalog LTR Oriya\n"
+"X-POFile-IgnoreConsistency: H:\n"
+"X-POFile-IgnoreConsistency: Untrusted\n"
+"X-POFile-IgnoreConsistency: Export\n"
+"X-POFile-SpellExtra: Hiragana Backspace Print PgUp Ins\n"
+"X-POFile-SpellExtra: ModificadoresEspaço Yi Lao Return gpg Caps Lock kab\n"
+"X-POFile-SpellExtra: aRts tags Buhid Insert Gurmukhi Malayalam Scroll\n"
+"X-POFile-SpellExtra: Delete Ogham PgDn Kannada Tab Home Katakana SysReq\n"
+"X-POFile-SpellExtra: KConvertTest Khmer OutraOpção Bopomofo\n"
+"X-POFile-SpellExtra: MarcasCombinatórias Enter UmaOpção Devanagari\n"
+"X-POFile-SpellExtra: Hanunoo Sinhala JanelaAutoExemplo Lars Ian help\n"
+"X-POFile-IgnoreConsistency: Try Different\n"
+"X-POFile-IgnoreConsistency: Delete\n"
+"X-POFile-IgnoreConsistency: Comment\n"
+"X-POFile-IgnoreConsistency: &Restore\n"
+"X-POFile-IgnoreConsistency: Reset\n"
+"X-POFile-IgnoreConsistency: 0.1\n"
+"X-POFile-IgnoreConsistency: Forward\n"
+"X-POFile-SpellExtra: Kanbun CTRL Klash Syloti JS Jan TETest QObject\n"
+"X-POFile-SpellExtra: Sebastian Geiser Far kdeinit Weis Mordad Yau Hausmann\n"
+"X-POFile-SpellExtra: execprefix autostart Dirk Nov Elul shanbe Farvardin\n"
+"X-POFile-SpellExtra: KApplication bin tagcloudtest displayname IFrame yo\n"
+"X-POFile-SpellExtra: Aza Adar Sáb dah XIM Sha Sonnet testregression Jamo\n"
+"X-POFile-SpellExtra: Shawwal Bah KConf IPA Hijri Sab Testkhtml Jeroen\n"
+"X-POFile-SpellExtra: QWidget dumps KJSEmbed Arb qttest stderr Kho ban Kha\n"
+"X-POFile-SpellExtra: PathLengthExceeded Tai shn Ago KrossTest Ithnain\n"
+"X-POFile-SpellExtra: klauncher tempfile Aban frame ThreadWeaver Kun yeyo\n"
+"X-POFile-SpellExtra: Buginese Lue Kislev Khamees home Jumma XDG Khordad\n"
+"X-POFile-SpellExtra: Zemberek KAboutData Wijnhout Sivan Saami Method Qua\n"
+"X-POFile-SpellExtra: Molkentin PTY Koivisto onthespot Ord Shvat Jom\n"
+"X-POFile-SpellExtra: KMultiPart Ahad CJK Aspell Tifinagh NoCARoot Tishrey\n"
+"X-POFile-SpellExtra: Up KDXSView ModRunner subtexto aifamily Panj path\n"
+"X-POFile-SpellExtra: NumLock keramik GHNS TestRegressionGui Yek Iyar Ahd\n"
+"X-POFile-SpellExtra: khtmltests Torben QApplication overthespot caption\n"
+"X-POFile-SpellExtra: khtml desktop Ispell QWS create Faure Object Limbu\n"
+"X-POFile-SpellExtra: KLauncher Sauer Hijjah Myanmar NEC BCC Fev Kelly\n"
+"X-POFile-SpellExtra: Jumee Stephan TestRegression Knoll frames HOME Jum\n"
+"X-POFile-SpellExtra: DISPLAY KNewStuff Awal Rajab pt plastik InvalidHost\n"
+"X-POFile-SpellExtra: kdemain STDOUT Jun Jul Kulow Yaum pa Chahar widgets\n"
+"X-POFile-SpellExtra: man KUnitTest pm KDEPIM TAB Waldo CL CC Balinês\n"
+"X-POFile-SpellExtra: Nagri Kangxi QLayout qtplugininstance regression\n"
+"X-POFile-SpellExtra: multipart Jalali Phags Set servname nograb\n"
+"X-POFile-SpellExtra: International Frame CGIs Stylesheet Library Sex Seg\n"
+"X-POFile-SpellExtra: KDontChangeTheHostName SO toner Yijing Peter Out\n"
+"X-POFile-SpellExtra: InvalidCA Le Khmeres Tevet Ordibehesht Anton am al\n"
+"X-POFile-SpellExtra: Tir Tuebingen Esf Abr ini KLocale KiB WMNET Dingbats\n"
+"X-POFile-SpellExtra: InvalidPurpose kdehelp id Glagolitic factory Esfand\n"
+"X-POFile-SpellExtra: Nisan kjs ErrorReadingRoot MiB Copta Shanbe Xvfb\n"
+"X-POFile-SpellExtra: client Mai Bastian document config TiB Jones AC\n"
+"X-POFile-SpellExtra: KBuildSycoca Bahman offthespot Mueller Tang ye Thu\n"
+"X-POFile-SpellExtra: Sabt NKo aisocktype mixed Carriage Thl aiflags\n"
+"X-POFile-SpellExtra: Muharram Reinhart Kontact Cantonês Page icon\n"
+"X-POFile-SpellExtra: makekdewidgets ManyColor Heshvan Kross Ith bind Antti\n"
+"X-POFile-SpellExtra: DXS Tamuz Shahrivar sessionId sh KJSCmd Av KLibLoader\n"
+"X-POFile-SpellExtra: Mehr GiB Arbi dograb AssinaturaFalhou prefix\n"
+"X-POFile-SpellExtra: Hexagramas ize AutoAssinado NãoConfiável Qi Down\n"
+"X-POFile-SpellExtra: directory Índicas ise Oxygen info shared share usr\n"
+"X-POFile-IgnoreConsistency: Separate Folders\n"
+"X-POFile-SpellExtra: XDGDATADIRS KTTS Control PrtScr Hyper Sys Win Screen\n"
+"X-POFile-SpellExtra: Req Break AltGr ReadOnly SHM EOF Re abc ABC QPL Kate\n"
+"X-POFile-SpellExtra: Serif Sans KFormula URIs raster opengl favicons Solid\n"
+"X-POFile-SpellExtra: Harald Fernengel KTTSD baseline Resource writeall\n"
+"X-POFile-SpellExtra: Trüg YiB PiB YB ZB EB PB EiB ZiB GB TB KIdleTest\n"
+"X-POFile-SpellExtra: Freddi KIdleTime Cha Āshwin Budhavãra Suk Paush\n"
+"X-POFile-SpellExtra: Shrāvana Somavãra Phālgun Raviãra Phā Māg\n"
+"X-POFile-SpellExtra: Bhādrapad Chaitra Māgh Sukravãra Āshādha\n"
+"X-POFile-SpellExtra: Agrahayana Bud Shr Guruvãra Mañ Gur Vaishākh Jya\n"
+"X-POFile-SpellExtra: Kārtik Agr Jyaishtha Kār Āsh Bhā Rav milisegundo\n"
+"X-POFile-SpellExtra: Āsw Mañgalvã Sanivãra Mayek Ol Saurashtra\n"
+"X-POFile-SpellExtra: Sundanês Viet Lisu Kayah Chiki Lepcha Meetei Cham\n"
+"X-POFile-SpellExtra: Rejang Tham Bamum Pshoment Pas Ptiou Neh Genbot Hamus\n"
+"X-POFile-SpellExtra: Pag Paope Pesnau Pes Hed Magabit Ehu Tahsas Yak Mag\n"
+"X-POFile-SpellExtra: Tob Pef Kou Pam Pao Tequemt Paremhotep Psh nabot\n"
+"X-POFile-SpellExtra: Hathor Pso Kiahk Hat Meo Psa Sene Psabbaton Miy\n"
+"X-POFile-SpellExtra: Pashons Mes LarguraxAltura Kia Qedame Ham Gen Hedar\n"
+"X-POFile-SpellExtra: Parmoute Teq Mesore Nehase Kouji Yakatit Maksegno\n"
+"X-POFile-SpellExtra: Paone Sen Meshir Pagumen Thoout Hamle Epe Mak\n"
+"X-POFile-SpellExtra: Tkyriakē Ehud Tho Qed Pti Psoou Segno Tah Rob\n"
+"X-POFile-SpellExtra: Miyazya Meskerem Tobe Peftoou Epep Tky pastabase Fã\n"
+"X-POFile-SpellExtra: KVTML USD Colaborativos Hunspell Jovie AM PM mails\n"
+"X-POFile-SpellExtra: mbuttonGroup Blog blog np cp nc UTC Mandaico Batak\n"
+"X-POFile-SpellExtra: DQTDECLARATIVEDEBUG QML slot pedro mantê Pocinhas\n"
+"X-POFile-SpellExtra: Reconstrói ii Del iii querê KPluginFactory Ki Ei Zi\n"
+"X-POFile-IgnoreConsistency: Update\n"
+"X-Qt-Contexts: true\n"
+"X-POFile-SpellExtra: Gi KListOpenFilesJob lsof\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Os termos da licença deste programa não foram indicados.\n"
+"Por favor consulte a documentação ou o código-fonte para mais\n"
+"informações acerca da licença.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Este programa é distribuído nos termos da licença %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licença Pública da GNU Versão 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licença Pública da GNU Lata Versão 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licença BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licença BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licença Artística"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licença Artística"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licença Pública Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licença Pública da GNU Versão 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licença Pública Lata da GNU Versão 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licença Pública da GNU Lata Versão 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizada"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Não indicada"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>O KDE está traduzido em várias línguas, graças ao trabalho das várias "
+"equipas de traduções por todo o mundo.</p><p>Para mais informações acerca da "
+"equipa de localização do KDE para Português visite <a href=\"http://kde-pt."
+"dyndns.org/\">http://kde-pt.dyndns.org/</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostra informações sobre o autor."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostra informações sobre a licença."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "O nome de base dos ficheiros do item 'desktop' para esta aplicação."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nome do ficheiro"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Esta aplicação foi escrita por alguém que quer continuar anónimo."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "O %1 foi escrito por:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Use por favor o https://bugs.kde.org para comunicar erros."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Por favor, comunique os erros para %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "A biblioteca %1 não possui um KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dias"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutos"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segundos"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisegundo"
+msgstr[1] "%n milisegundos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dia"
+msgstr[1] "%n dias"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n horas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minutos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segundo"
+msgstr[1] "%n segundos"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 e %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data inválida"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Daqui a dois dias"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Amanhã"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hoje"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ontem"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Há dois dias"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Mesmo agora"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "há %1 minutos"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "A localização %1 não existe"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Não foi possível executar o `lsof' com o código de erro %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "O KListOpenFilesJob não tem suporte para o Windows"
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-26 10:01+0000\n"
+"Last-Translator: José Nuno Coelho Pires <zepires@gmail.com>\n"
+"Language-Team: Portuguese <kde-i18n-pt@kde.org>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POFile-SpellExtra: PIC HDR Kommander Okular KmPlot Book Mobipocket Cabri\n"
+"X-POFile-SpellExtra: RealAudio rtspt rtspu KNewStuff Kolf abc Kugar\n"
+"X-POFile-SpellExtra: Cachegrind Kig KGeo NG Callgrind Plan KHTML KSeg Geo\n"
+"X-POFile-SpellExtra: Markup Softimage KGet Turtle Language KPlato TriG\n"
+"X-POFile-SpellExtra: Metalink mms KWordQuiz RDF SuperKaramba mmsu mmst SNF\n"
+"X-POFile-SpellExtra: KWallet RELAX KPhotoAlbum NewzBin Umbrello Kopete pnm\n"
+"X-POFile-SpellExtra: Kate WebP KXMLGUI KNotification KConfigXT KCrash\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Áudio de CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Tipo de letra por imagens SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "'Applet' de Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adaptador de Extensões do KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Esquema de cores do KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Pacote do KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Carteira da KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Modelo de relatórios do Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmóide"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Tema do SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Documento de gestão de projectos do Plan para o Calligra"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Documento de pacote de trabalho do Plan para o Calligra"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Documento de gestão de projectos do KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Pacote de trabalho de gestão de projectos do KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Pacote do Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "pacote Web"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Esquema XML da W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Ficheiro de 'plugin' do RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Importação do KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Imagem HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formatos de imagem em bruto do KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Ficheiro-objecto em hexadecimal da Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Lista de 'plugins' de carregamento de listas de ficheiros do Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Ficheiro de notação musical do 'abc'"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "pacote de tipos de letra"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Servidor do Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Grupo de trabalho do Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Monitor do sistema KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Tema do KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Projecto do Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Ficheiro do Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "batata"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Jogo gravado do Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Campo do Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Pacote de documentos do Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Imagem do Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Imagem do Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Imagem do KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Imagem do Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Documento do KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "documento de treino de vocabulários"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Ficheiro do KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Vocabulário do KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Resultado da análise do Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Ficheiro de modelação em UML do Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Hiperligação do Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Lista de transferências do KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Pacote de ícones emotivos do Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Contacto de ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Formato Multimédia da Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Documento RDF do Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Imagem PIC da Softimage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Ficheiro na Qt Markup Language"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Opções de Configuração do KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Opções de Geração de Código do KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Declaração de UI do KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Declaração do KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Relatório do KCrash"
--- /dev/null
+# Translation of kcoreaddons5_qt.po to Brazilian Portuguese
+# Copyright (C) 2002-2020 This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Lisiane Sztoltz <lisiane@conectiva.com.br>, 2002, 2003, 2004.
+# Lisiane Sztoltz Teixeira <lisiane@kdemail.net>, 2003, 2004, 2005.
+# Henrique Pinto <stampede@coltec.ufmg.br>, 2003.
+# Marcus Gama <marcus.gama@gmail.com>, 2006.
+# Diniz Bortolotto <diniz.bortolotto@gmail.com>, 2007, 2008.
+# André Marcelo Alvarenga <alvarenga@kde.org>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2020.
+# Luiz Fernando Ranghetti <elchevive@opensuse.org>, 2008, 2009, 2010, 2012, 2016, 2017, 2018, 2019, 2020.
+# Fernando Boaglio <boaglio@kde.org>, 2009.
+# Doutor Zero <doutor.zero@gmail.com>, 2007, 2009.
+# Marcus Vinícius de Andrade Gama <marcus.gama@gmail.com>, 2010, 2012.
+# Aracele Torres <araceletorres@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-11-27 11:06-0300\n"
+"Last-Translator: Luiz Fernando Ranghetti <elchevive@opensuse.org>\n"
+"Language-Team: Brazilian Portuguese <kde-i18n-pt_BR@kde.org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 20.04.3\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nenhum termo de licença foi indicado para este programa.\n"
+"Por favor, verifique a documentação ou o código-fonte para\n"
+"mais informações sobre a licença.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Este programa é distribuído sob os termos da %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licença Pública Geral GNU versão 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licença Pública Menos Geral GNU versão 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licença BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licença BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licença Artística"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licença Artística"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licença pública Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licença Pública Geral GNU versão 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licença Pública Menos Geral GNU versão 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licença Pública Menos Geral GNU versão 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizada"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Não especificada"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>O KDE é traduzido para muitos idiomas, graças ao trabalho das equipes de "
+"tradução do mundo inteiro.</p><p>Para mais informações sobre a "
+"internacionalização do KDE, visite <a href=\"https://l10n.kde.org\">https://"
+"l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostra informações sobre o autor."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostra informações sobre a licença."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "O nome de base dos arquivos do item 'desktop' para este aplicativo."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "nome do arquivo"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Este aplicativo foi escrito por alguém que quer permanecer anônimo."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 foi escrito por:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Use a página https://bugs.kde.org para relatar erros."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Por favor, relate os erros em %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "A biblioteca %1 não oferece um KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1min%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1min%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2min"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2min%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2min%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dias"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 horas"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minutos"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segundos"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milissegundo"
+msgstr[1] "%n milissegundos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dia"
+msgstr[1] "%n dias"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hora"
+msgstr[1] "%n horas"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuto"
+msgstr[1] "%n minutos"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n segundo"
+msgstr[1] "%n segundos"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 e %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Data inválida"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Em dois dias"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Amanhã"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hoje"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ontem"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Há dois dias"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Agora"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 minutos atrás"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "O caminho %1 não existe"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Falha ao executar `lsof', código de erro %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "O KListOpenFilesJob não é suportado no Windows"
--- /dev/null
+# Translation of xml_mimetypes5.po to Brazilian Portuguese
+# Copyright (C) 2014-2020 This file is copyright:
+# This file is distributed under the same license as the PACKAGE package.
+#
+# André Marcelo Alvarenga <alvarenga@kde.org>, 2014, 2020.
+# Luiz Fernando Ranghetti <elchevive@opensuse.org>, 2017, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes5\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-11-04 15:55-0300\n"
+"Last-Translator: Luiz Fernando Ranghetti <elchevive@opensuse.org>\n"
+"Language-Team: Brazilian Portuguese <kde-i18n-pt_BR@kde.org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 20.04.3\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Áudio de CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Fonte bitmap SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Miniaplicativo Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adaptador de extensões do KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Esquema de cores do KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Pacote do KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Carteira do KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Modelo de relatório do Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoide"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Tema do SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Documento de gerenciamento de projetos do Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Documento do pacote de trabalho do Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Documento de gerenciamento de projetos do KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Pacote de trabalho de gerenciamento de projetos do KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Arquivo do Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "Arquivo Web"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Esquema XML da W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Arquivo de plugin do RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Importação do KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Imagem HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formatos de imagem RAW do KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Arquivo objeto em hexadecimal da Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Lista de plugins de carregamento de listas de arquivos do Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "arquivo de notação musical do abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "pacote de fontes"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Servidor do Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Grupo de trabalho do Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Monitor do sistema do KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Tema do KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Projeto do Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Arquivo do Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "batata"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Jogo salvo do Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Campo de golfe"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Arquivo de documento do Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Imagem do Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Imagem do Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Imagem do KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Imagem do Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Documento do KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "documento de treino de vocabulários"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Arquivo do KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Vocabulário do KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Resultado da análise do Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Arquivo de modelador UML do Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Link do Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Lista de downloads do KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Arquivo de emoticons do Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Contato do ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Formato de mídia da Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Documento RDF do Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Imagem PIC da Softimage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Arquivo da Qt Markup Language"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Opções de configuração do KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Opções de geração de código do KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Declaração UI do KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Declaração do KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Relatório do KCrash"
--- /dev/null
+# Traducerea kdelibs4.po în Română
+# Laurenţiu Buzdugan <lbuz@rolix.org>, 2008, 2009.
+# Sergiu Bivol <sergiu@cip.md>, 2008, 2009, 2010.
+# Sergiu Bivol <sergiu@cip.md>, 2010, 2012, 2013, 2014, 2020.
+# Cristian Oneț <onet.cristian@gmail.com>, 2010, 2011, 2012, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-12-19 16:56+0000\n"
+"Last-Translator: Sergiu Bivol <sergiu@cip.md>\n"
+"Language-Team: Romanian\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2;\n"
+"X-Generator: Lokalize 19.12.3\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nu au fost specificați termeni de licențiere pentru\n"
+"acest program. Verificați dacă există asemenea\n"
+"termeni în documentație sau în codul sursă.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Acest program este distribuit sub termenii %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licența Publică Generală GNU versiunea 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Licența „GNU Lesser General Public License Version 2”"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licența BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licența BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licența Artistică"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licența Artistică"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licența Publică Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licența Publică Generală GNU versiunea 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Licența „GNU Lesser General Public License Version 3”"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Licența „GNU Lesser General Public License Version 2.1”"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizată"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nespecificată"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE a fost tradus în multe limbi. Datorită eforturilor echipei de "
+"traducători români, aveți posibilitatea să vă bucurați de un mediu grafic în "
+"limba română.</p><p>Pentru informații suplimentare, vizitați <a href="
+"\"https://ro.kde.org/\">https://ro.kde.org/</a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Arată informații despre autor."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Arată informații despre licență."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"Denumirea de fișier de bază pentru înregistrarea de birou a acestei "
+"aplicații."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "denumire fișier"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Acestă aplicație a fost scrisă de cineva care vrea să rămână anonim."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 a fost scris de:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Folosiți https://bugs.kde.org pentru a raporta erori."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Raportați erori la %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteca %1 nu oferă o KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "O"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kO"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MO"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GO"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TO"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PO"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EO"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZO"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YO"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KO"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MO"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GO"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TO"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PO"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EO"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZO"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YO"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 O"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiO"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiO"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiO"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiO"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiO"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiO"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiO"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiO"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 zile"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ore"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minute"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 secunde"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisecundă"
+msgstr[1] "%n milisecunde"
+msgstr[2] "%n de milisecunde"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n zi"
+msgstr[1] "%n zile"
+msgstr[2] "%n de zile"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n oră"
+msgstr[1] "%n ore"
+msgstr[2] "%n de ore"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minute"
+msgstr[2] "%n de minute"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n secundă"
+msgstr[1] "%n secunde"
+msgstr[2] "%n de secunde"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 și %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Dată nevalidă"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "În două zile"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Mâine"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Astăzi"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ieri"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Acum două zile"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Chiar acum"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "Acum %1 minute"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Calea %1 nu există"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Executarea „lsof” a eșuat, codul erorii: %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob nu e susținută în Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Sergiu Bivol <sergiu@cip.md>, 2009, 2014, 2020, 2021.
+# Cristian Oneț <onet.cristian@gmail.com>, 2010, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-07-25 09:07+0100\n"
+"Last-Translator: Sergiu Bivol <sergiu@cip.md>\n"
+"Language-Team: Romanian\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2;\n"
+"X-Generator: Lokalize 19.12.3\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "font SNF hartă de biți"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "miniaplicație Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "adaptor de extensii KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "schemă de culori KDE"
+
+# well-spelled: KNewStuff
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "pachet KNewStuff"
+
+# well-spelled: KWallet
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "portofel KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "șablon de raport Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "tematică SuperKaramba"
+
+# well-spelled: KPlato
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "document management de proiect Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "sarcină de lucru management de proiect Calligra Plan"
+
+# well-spelled: KPlato
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "document management de proiect KPlato"
+
+# well-spelled: KPlato
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "pachet de lucru pentru management de proiect KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "arhivă Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "arhivă web"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Schemă XML W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "fișier cu extensie RealAudio"
+
+# well-spelled: KPhotoAlbum
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "import KPhotoAlbum"
+
+# well-spelled: HDR
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "imagine HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "formate de imagine brute KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "fișier cu obiect hexazecimal Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "listă cu extensii pentru încărcător de liste de fișiere Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "fișier cu notație muzicală abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "pachet de fonturi"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "server Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "grup de lucru Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "monitor de sistem KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "tematică KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "proiect Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "fișier Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "cartof"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "joc salvat Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "curs de Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "arhivă cu documente Okular"
+
+# well-spelled: Cabri
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "figură Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "figură Dr. Geo"
+
+# well-spelled: KGeo
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "figură KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "figură Kig"
+
+# well-spelled: KSeg
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "document KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "document de antrenare a vocabularului"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "fișier KmPlot"
+
+# well-spelled: KWordQuiz
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "vocabular KWordQuiz"
+
+# well-spelled: Cachegrind, Callgrind
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "informații de profilare Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "fișier Modelator UML Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "legătură Windows"
+
+# well-spelled: KGet
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "listă cu descărcări KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "arhivă cu emoticoni Kopete"
+
+# well-spelled: ICQ
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "contact ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "document RDF Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "imagine Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "fișier cu limbaj de marcare Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "opțiuni de configurare KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "opțiuni de generare a codului KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "declarație KXMLGUI UI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "declarație KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "raport KCrash"
--- /dev/null
+# KDE - kdelibs/kdelibs4.po Russian translation.
+# Copyright (C) 2005, KDE Russian translation team.
+#
+# Denis Perchine <dyp@perchine.com>, 2000.
+# Gregory Mokhin <mok@kde.ru>, 2000, 2004, 2005.
+# Albert R. Valiev <darkstar@altlinux.ru>, 2002, 2008.
+# Leonid Kanter <leon@asplinux.ru>, 2002-2004, 2005, 2008.
+# Andrey Cherepanov <skull@kde.ru>, 2005-2007, 2008, 2009, 2011.
+# Nick Shaforostoff <shaforostoff@kde.ru>, 2004, 2006, 2007, 2008, 2009.
+# Nick Shaforostoff <shafff@ukr.net>, 2009.
+# Alexander Potashev <aspotashev@gmail.com>, 2009, 2010, 2011, 2014, 2015, 2016, 2017, 2018, 2019.
+# Yury G. Kudryashov <urkud.urkud@gmail.com>, 2011.
+# Yuri Efremov <yur.arh@gmail.com>, 2012.
+# Inga Barinova <ingabarinova@gmail.com>, 2012.
+# Julia Dronova <juliette.tux@gmail.com>, 2012.
+# Alexander Lakhin <exclusion@gmail.com>, 2013.
+# Alexander Yavorsky <kekcuha@gmail.com>, 2019, 2020, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-01-07 14:00+0300\n"
+"Last-Translator: Alexander Yavorsky <kekcuha@gmail.com>\n"
+"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 20.12.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Лицензия в данной программе не указана.\n"
+"Возможно, она указана в документации или в исходных текстах этой программы.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Программа распространяется на условиях %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License, версия 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License, версия 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Лицензия BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Лицензия BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License, версия 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License, версия 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License, версия 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Другая лицензия"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Лицензия не указана"
+
+# BUGME: keep this up to date --aspotashev
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Графическая среда KDE переведена на многие языки благодаря работе команд "
+"переводчиков в разных странах.</p><p>Для дополнительной информации о "
+"переводе KDE зайдите на <a href=\"https://l10n.kde.org\">l10n.kde.org</a>, а "
+"также на <a href=\"https://kde.ru/translation\">kde.ru/translation</a>. Там "
+"вы сможете узнать о работе команды, переводившей KDE на русский язык, и, "
+"возможно, сами захотите участвовать в этой работе.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Показать сведения об авторе."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Показать сведения о лицензии."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Имя файла .desktop (без пути) для этого приложения."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "имя файла"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Автор программы пожелал остаться неизвестным."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 написали:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Используйте https://bugs.kde.org для отправки сообщений об ошибках."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Используйте %1 для отправки сообщений об ошибках."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+"Библиотека %1 не предоставляет механизма создания компонентов KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "и"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "з"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "а"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "ф"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "п"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "н"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "мк"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "м"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "к"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ки"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "М"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Ми"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "Г"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Ги"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "Т"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ти"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "П"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Пи"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "Э"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Эи"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "З"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Зи"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "И"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Ии"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "бит"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "Б"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "м"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Гц"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 КБ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЭБ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+# BUGME: "КБ" or "КиБ" here? --aspotashev
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 КиБ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МиБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГиБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТиБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПиБ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЭиБ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗиБ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙиБ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КиБ"
+
+# BUGME: something is wrong in the comment extracted from source code: it says 10^20 while it should 2^20 --aspotashev
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МиБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГиБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ТиБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ПиБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ЭиБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ЗиБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ЙиБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1м%2,%3с"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1м%2с"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1ч%2м"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1ч%2м%3,%4с"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1ч%2м%3с"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дня"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 часа"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минуты"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунды"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n миллисекунда"
+msgstr[1] "%n миллисекунды"
+msgstr[2] "%n миллисекунд"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n день"
+msgstr[1] "%n дня"
+msgstr[2] "%n дней"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n час"
+msgstr[1] "%n часа"
+msgstr[2] "%n часов"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n минута"
+msgstr[1] "%n минуты"
+msgstr[2] "%n минут"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n секунда"
+msgstr[1] "%n секунды"
+msgstr[2] "%n секунд"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Недопустимая дата"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "В течение двух дней"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Завтра"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Сегодня"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Вчера"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Два дня назад"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Только что"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 минут(ы) назад"
+
+# BUGME: translate as "%1 в %2"? Need testing. --aspotashev
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Путь «%1» не существует"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Не удалось выполнить «lsof». Код ошибки: %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "Объект «KListOpenFilesJob» не поддерживается в ОС Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Nick Shaforostoff <shaforostoff@kde.ru>, 2009.
+# Alexander Potashev <aspotashev@gmail.com>, 2009, 2010, 2011, 2014, 2018, 2019.
+# Alexander Yavorsky <kekcuha@gmail.com>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-01-19 21:06+0300\n"
+"Last-Translator: Alexander Yavorsky <kekcuha@gmail.com>\n"
+"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 19.12.1\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: \n"
+"X-Text-Markup: \n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "Документ RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Дорожка на Audio CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Растровый шрифт SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java-апплет"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Адаптер расширений KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Цветовая схема KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Пакет KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Бумажник KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Шаблон отчёта Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "Виджет"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Виджет SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Проект Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Пакет работ Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Проект KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Пакет работ KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Архив Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "Веб-архив"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Структура XML Schema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Файл расширения RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Архив фотоальбома KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Изображение HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Необработанное изображение"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Файл Intel HEX"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Список файлов Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Нотная запись ABC"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "Пакет шрифтов"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Сервер Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Рабочая группа Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Системный монитор KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Оформление KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Проект Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Файл Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "Картофельный парень"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Сохранённая игра Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Площадка Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Архив Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Чертёж Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Чертёж Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Чертёж KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Чертёж Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Документ KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "Тренировка словарного запаса"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Файл KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Словарь KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Данные профилирования Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Модель Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Ярлык Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Список загрузок KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Набор смайликов для Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Контакт ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Файл Microsoft Media"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Документ Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Изображение Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Исходный код QML"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+#, fuzzy
+#| msgid "KConfigXT Configuration Options"
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Параметры конфигурации KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+#, fuzzy
+#| msgid "KConfigXT Code Generation Options"
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Параметры создания кода KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+#, fuzzy
+#| msgid "KXMLGUI UI Declaration"
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Конфигурация интерфейса KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+#, fuzzy
+#| msgid "KNotification Declaration"
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Конфигурация KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+#, fuzzy
+#| msgid "KCrash Report"
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Отчёт об ошибке KCrash"
--- /dev/null
+# Translation of kcoreaddons5_qt to Northern Sami
+#
+# Børre Gaup <boerre@skolelinux.no>, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-02-28 03:44+0000\n"
+"PO-Revision-Date: 2012-05-30 23:19+0200\n"
+"Last-Translator: Børre Gaup <boerre@skolelinux.no>\n"
+"Language-Team: Northern Sami <l10n-no@lister.huftis.org>\n"
+"Language: se\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Dán prográmma liseansaeavttut eai leat almmuhuvvon.\n"
+"Iskka liseansaeavttuid veahketeavsttas dahje gáldokodas.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Dát prográmma juhkkojuvvo %1 eavttuid mielde."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License veršuvdna 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public liseansa, veršuvdna 2"
+
+# unreviewed-context
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-liseansa"
+
+# unreviewed-context
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-liseansa"
+
+# unreviewed-context
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artisttalaš-liseansa"
+
+# unreviewed-context
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artisttalaš-liseansa"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public liseansa, veršuvdna 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public liseansa, veršuvdna 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Iešdefinerejuvvon"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ii meroštuvvon"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Čájet dieđuid čálli birra"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Čájet dieđu liseanssa birra"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Olmmoš gii háliida leat namakeahttá lea čállán dán prográmma."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ""
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 S"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kS"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MS"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GS"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TS"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PS"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ES"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZS"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YS"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 S"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KS"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MS"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GS"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TS"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PS"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ES"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZS"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YS"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 S"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiS"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiS"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiS"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiS"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 TiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 beaivvi"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 diimmu"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuhta"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundda"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 beaivvi"
+msgstr[1] "%1 beaivvi"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 diimmu"
+msgstr[1] "%1 diimmu"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 minuhta"
+msgstr[1] "%1 minuhta"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 sekundda"
+msgstr[1] "%1 sekundda"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ja %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Ihttin"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Otne"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ikte"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Translation of kde5_xml_mimetypes to Northern Sami
+#
+# Børre Gaup <boerre@skolelinux.no>, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2011-11-03 18:16+0100\n"
+"Last-Translator: Børre Gaup <boerre@skolelinux.no>\n"
+"Language-Team: Northern Sami <l10n-no@lister.huftis.org>\n"
+"Language: se\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Environment: kde\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: kde4\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Danishka Navin <danishka@gmail.com>, 2008, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2011-07-25 07:45+0530\n"
+"Last-Translator: Danishka Navin <danishka@gmail.com>\n"
+"Language-Team: Sinhala <danishka@gmail.com>\n"
+"Language: si\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"මෙම වැඩසටහන සඳහා කිසිදු ලියාපදිංචි කිරීමේ බලපත්ර නියමයක් විශේෂණය කර නොමැත.\n"
+"ලියාපදිංචි කිරීමේ බලපත්ර සඳහා ප්රලේඛනය හෝ මූලය පරීක්ෂා කරන්න.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "%1 හි වගන්ති යටතේ මෙම වැඩසටහන බෙදාහරිණ ලදි."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU සාමාන්ය පොදු බලපත්ර 2 වන වෙළුම"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU අවම සාමාන්ය පොදු බලපත්ර 2 වන වෙළුම"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD බලපත්රය"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD බලපත්රය"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "කලාත්මක බලපත්රය"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "කලාත්මක බලපත්රය"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q පොදු බලපත්රය"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU අවම සාමාන්ය පොදු බලපත්ර 2 වන වෙළුම"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "රිසිකළ"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "විශේෂිතව නොදැක්වු"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>ලොව වටා සිටින පරිවර්තන කණ්ඩායම් ස්තුති වන්නට KDE විවිධ භාෂාවන්ට පරිවර්තනය කර ඇත.</"
+"p><p>KDE ජාත්යන්තරීකරණය පිළිබඳ බොහෝ තොරතුරු සඳහා <a href=\"http://l10n.kde.org"
+"\">http://l10n.kde.org</a> වෙතට පිවිසෙන්න</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "කතෘගේ තොරතුරු පෙන්වන්න"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "බලපත්ර තොරතුරු පෙන්වන්න"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "නිර්නාමික ලෙස සිටීමට අවශ්ය කෙනෙකු වැඩසටහන ලියා ඇත."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ලියන ල්දේ\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "කරුණාකර දෝෂ වාර්තා කිරීමට http://bugs.kde.org භාවිත කරන්න.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "කරුණාකර දෝෂය %1 වෙතට දන්වන්න.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 පුස්තකාලය KDE 4 අනුකූල වැඩපොලක් ලබා නොදේ."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "පෙ.ව."
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "ප.ව"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "පෙ.ව."
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "හරි"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kia"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "පෙ.ව."
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Miy"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "ප.ව."
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "ප.ව."
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "සැකසුම්"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ලබා දෙන්න"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "පෙ.ව."
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "දින %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "පැය %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "මිනිත්තු %1"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "තත්පර %1"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "මිලිතත්පර %1"
+msgstr[1] "මිලිතත්පර %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "දින %1"
+msgstr[1] "දින %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "පැය %1"
+msgstr[1] "පැය %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "මිනිත්තු %1"
+msgstr[1] "මිනිත්තු %1"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "තත්පර %1"
+msgstr[1] "තත්පර %1"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 සහ %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "InvalidCA"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "දින %1"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "හෙට"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "අද"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "ඊයේ"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "මිනිත්තු %1"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 ගොනුව හමුවූයේ නැත"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Slovak
+# Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>, 2002.
+# Stanislav Visnovsky <visnovsky@kde.org>, 2003, 2004, 2005.
+# Richard Fric <Richard.Fric@kdemail.net>, 2006, 2007, 2010.
+# Michal Gaspar <miguel@portugal.sk>, 2006.
+# Jakub <vatrtj@gmail.com>, 2009.
+# Michal Sulek <misurel@gmail.com>, 2009, 2010, 2011.
+# Richard Frič <Richard.Fric@kdemail.net>, 2011.
+# Roman Paholík <wizzardsk@gmail.com>, 2012, 2013, 2014, 2015, 2016.
+# Mthw <jari_45@hotmail.com>, 2019.
+# Matej Mrenica <matejm98mthw@gmail.com>, 2019, 2021.
+# Dusan Kazik <prescott66@gmail.com>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-02-11 09:31+0100\n"
+"Last-Translator: Matej Mrenica <matejm98mthw@gmail.com>\n"
+"Language-Team: Slovak <kde-i18n-doc@kde.org>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 20.12.2\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Pre tento program neboli určené žiadne licenčné podmienky.\n"
+"Prosím, pozrite sa do dokumentácie alebo do zdrojových kódov,\n"
+"či neobsahujú licenčné podmienky.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Tento program je distribuovaný pod licenciou %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License verzia 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License verzia 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licencia BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licencia BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licencia Artistic"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licencia Artistic"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License verzia 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License verzia 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Vlastné"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Neurčená"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Prostredie KDE je preložené do veľa jazykov vďaka práci prekladateľských "
+"tímov po celom svete.</p><p>Pre viac informácií o internacionalizácii "
+"prostredia KDE navštívte <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Zobrazí informácie o autorovi."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Zobrazí licenčné informácie ."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Základný názov súboru položky plochy pre túto aplikáciu."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "meno súboru"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Túto aplikáciu napísal niekto, kto chce zostať v anonymite."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 napísal:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Prosím, použite https://bugs.kde.org na hlásenie chýb."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prosím nahláste chyby na %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Knižnica %1 neposkytuje KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dní"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 hodín"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minút"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekúnd"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekundy"
+msgstr[2] "%n milisekúnd"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n deň"
+msgstr[1] "%n dni"
+msgstr[2] "%n dní"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n hodina"
+msgstr[1] "%n hodiny"
+msgstr[2] "%n hodín"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minúta"
+msgstr[1] "%n minúty"
+msgstr[2] "%n minút"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekundy"
+msgstr[2] "%n sekúnd"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 a %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Neplatný dátum"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "O dva dni"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Zajtra"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Dnes"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Včera"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Pred dvoma dňami"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Práve teraz"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "Pred %1 minútami"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Cesta %1 neexistuje"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Nepodarilo sa spustiť príkaz \"lsof\" chybový kód %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob nie je podporovaný na Windows-e"
--- /dev/null
+# translation of xml_mimetypes.po to Slovak
+# Roman Paholik <wizzardsk@gmail.com>, 2014.
+# Mthw <jari_45@hotmail.com>, 2019.
+# Matej Mrenica <matejm98mthw@gmail.com>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-01-27 19:56+0100\n"
+"Last-Translator: Matej Mrenica <matejm98mthw@gmail.com>\n"
+"Language-Team: Slovak <kde-i18n-doc@kde.org>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 19.12.1\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Audio CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Bitmapové písmo SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java applet"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Adaptér pre KHTML rozšírenia"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Farebná schéma KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Balíček KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet wallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Reportovacia šablóna Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Téma SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Dokument riadenia projektov Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Dokument riadenia pracovných balíkov Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Dokument riadenia projektov v KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Pracovný balíček riadenia projektov v KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Archív Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "webový archív"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Schéma W3C XML"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Súbor modulu RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Import KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR obrázok"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Formáty obrázkov raw v KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® hexadecimálny objektový súbor"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Zoznam modulov - načítanie zoznamu súborov Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Súbor hudobnej notácie abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "balíček písiem"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Server Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Pracovná skupina Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Monitor systému pre KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Téma KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Projekt Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Súbor Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Uložená hra Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kurz Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Archív dokumentu Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Obrázok Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Obrázok Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Obrázok KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Obrázok Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Dokument KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "Dokument tréningu slovnej zásoby"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Súbor KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Slovná zásoba KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Výpis profilu Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Súbor Umbrello UML Modeller"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Odkaz Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Zoznam sťahovania KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Archív emotikonov Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Kontakt ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Dokument Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC obrázok"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Súbor značkovacieho jazyka Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+#, fuzzy
+#| msgid "KConfigXT Configuration Options"
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Konfiguračné možnosti KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+#, fuzzy
+#| msgid "KConfigXT Code Generation Options"
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Nástroje generovania kódu KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+#, fuzzy
+#| msgid "KXMLGUI UI Declaration"
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Deklarácia KXMLGUI UI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+#, fuzzy
+#| msgid "KNotification Declaration"
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Deklarácia KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+#, fuzzy
+#| msgid "KCrash Report"
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Hlásenie KCrash"
--- /dev/null
+# Slovenian translation of kdelibs4
+# KDELIBS translation to Slovenian language
+# $Id: kdelibs4.po 685926 2007-07-10 04:25:11Z scripty $
+# $Source$
+#
+# Copyright (C) 2002,2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Roman Maurer <roman.maurer@amis.net>, 2002.
+# Gregor Rakar <gregor.rakar@kiss.uni-lj.si>, 2002,2003.
+# Gregor Rakar <gregor.rakar@kiss.si>, 2003, 2004, 2005.
+# Andrej Vernekar <andrej.vernekar@moj.net>, 2005, 2007, 2008, 2009, 2010.
+# Jure Repinc <jlp@holodeck1.com>, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Andrej Vernekar <andrej.vernerkar@moj.net>, 2008, 2011, 2012.
+# Andrej Mernik <andrejm@ubuntu.si>, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
+# Matjaž Jeran <matjaz.jeran@amis.net>, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-11-19 08:29+0100\n"
+"Last-Translator: Matjaž Jeran <matjaz.jeran@amis.net>\n"
+"Language-Team: Slovenian <lugos-slo@lugos.si>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Translator: Andrej Mernik <andrejm@ubuntu.si>\n"
+"X-Generator: Lokalize 20.08.1\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100>=3 && n"
+"%100<=4 ? 2 : 3);\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Za ta program ni določenih pogojev licenciranja. Oglejte\n"
+"si dokumentacijo ali izvorno kodo za morebitne\n"
+"licenčne pogoje.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ta program se razširja pod pogoji %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Splošno dovoljenje GNU različica 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Manj splošno dovoljenje GNU različica 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licenca BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licenca BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Umetniška licenca"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Umetniška licenca"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Javna licenca Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Splošno dovoljenje GNU različica 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Manj splošno dovoljenje GNU različica 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Manj splošno dovoljenje GNU različica 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Po meri"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ni navedena"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE je v slovenščino prevedla skupina za slovenjenje Linuxa pri Društvu "
+"uporabnikov Linuxa Slovenije - Lugos.</p><p>Več podrobnosti poiščite na "
+"straneh <a href=\"http://www.lugos.si/\">www.lugos.si</a> in <a href="
+"\"https://l10n.kde.org/\">l10n.kde.org</a>.</p><p>Napake v prevodih in "
+"predloge za izboljšave nam sporočite na dopisni seznam <a href=\"http://"
+"liste2.lugos.si/cgi-bin/mailman/listinfo/lugos-slo\">lugos-slo</a>. Na istem "
+"dopisnem seznamu se lahko tudi pridružite skupnosti prevajalcev KDE-ja.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Pokaži podrobnosti o avtorju."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Pokaži podrobnosti o licenci."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Osnovno ime datoteke namiznega vnosa za ta program."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "ime datoteke"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ta program je napisal nekdo, ki želi ostati anonimen."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 je napisal(a):"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Za poročanje o hroščih uporabite https://bugs.kde.org."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Za poročanje o hroščih uporabite %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Knjižnica %1 ne ponuja KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1 min %2.%3 s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1 min %2 s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1 u %2 min"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1 u %2 min %3.%4 s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1 u %2 min %3 s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dni"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ur"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minut"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekund"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekundi"
+msgstr[2] "%n milisekunde"
+msgstr[3] "%n milisekund"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dan"
+msgstr[1] "%n dneva"
+msgstr[2] "%n dnevi"
+msgstr[3] "%n dni"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n ura"
+msgstr[1] "%n uri"
+msgstr[2] "%n ure"
+msgstr[3] "%n ur"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minuta"
+msgstr[1] "%n minuti"
+msgstr[2] "%n minute"
+msgstr[3] "%n minut"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekundi"
+msgstr[2] "%n sekunde"
+msgstr[3] "%n sekund"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 in %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Neveljaven datum"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "V dveh dneh"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Jutri"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Danes"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Včeraj"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Pred dvema dnevoma"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Prav zdaj"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "pred %1 minutami"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Pot %1 ne obstaja"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Ni bilo mogoče izvesti ukaza `lsof' koda napake %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob ni podprt v okolju Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Andrej Vernekar <andrej.vernekar@moj.net>, 2009, 2010, 2011.
+# Jure Repinc <jlp@holodeck1.com>, 2010, 2012.
+# Andrej Mernik <andrejm@ubuntu.si>, 2013, 2014, 2018.
+# Matjaž Jeran <matjaz.jeran@amis.net>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-27 09:31+0100\n"
+"Last-Translator: Matjaž Jeran <matjaz.jeran@amis.net>\n"
+"Language-Team: Slovenian <lugos-slo@lugos.si>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 19.12.2\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Zvočni CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Bitna pisava SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Aplet Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Prilagodilnik razširitve KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Barvna shema KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Paket KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Listnica Kwallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Predloga za poročila Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Tema SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Dokument upravljanja projektov Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Dokument delovnega paketa Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Dokument upravljanja projektov KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Delovni paket upravljanja projektov KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Arhiv Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "spletni arhiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Shema W3C XML"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Datoteka vstavka RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Uvoz v KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Slika HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE surovi formati slik"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® šestnajstiška predmetna datoteka"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Seznam vstavka nalagalnika seznamov datotek za Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Datoteka glasbenega zapisa abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "paket pisav"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Strežnik Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Delovna skupina Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Sistemski nadzornik KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Tema KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Projekt Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Datoteka Kommanderja"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "krompirček"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Shranjena igra Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Igrišče Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Arhiv dokumentov za Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Lik Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Lik Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Lik KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Lik Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Dokument KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "dokument za vadbo besedišča"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Datoteka KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Besedišče KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Izpis profila Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Datoteka UML modelirnika Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Povezava v Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Seznam prejemov KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Arhiv z izraznimi ikonami za Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Stik ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Dokument Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Slika Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Datoteka označevalnega jezika Qt (QML)"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Nastavitvene možnosti KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Možnosti ustvarjanja kode KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Deklaracija uporabniškega vmesnika KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Deklaracija KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "Poročilo KCrash"
--- /dev/null
+# Agron Selimaj <as9902613@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kde4libs\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-01-19 00:20-0500\n"
+"Last-Translator: Agron Selimaj <as9902613@gmail.com>\n"
+"Language-Team: Albanian <sq@li.org>\n"
+"Language: sq\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2010-11-24 03:19+0000\n"
+"X-Generator: Lokalize 1.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nuk janë specifikuar terma liçensimi për këtë program.\n"
+"Ju lutemi kontrolloni dokumentimin ose burimin për ndonjë\n"
+"term liçensimi.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ky program shpërndahet nën termat e %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Liçensa e Përgjithshme Publike GNU Versioni 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Liçensa Më Pak e Përgjithshme Publike GNU Versioni 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Liçensa BSD"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Liçensa BSD"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Liçensa Artistike"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Liçensa Artistike"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Liçensa Publike Q"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Liçensa e Përgjithshme Publike GNU Versioni 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Liçensa Më Pak e Përgjithshme Publike GNU Versioni 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Liçensa Më Pak e Përgjithshme Publike GNU Versioni 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Personalizuar"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "I papërcaktuar"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE është përkthyer në shumë gjuhë falë punës së skuadrave të përkthimit "
+"kudo nëpër botë.</p><p>Për më tepër informacion rreth ndërkombëtarizimit të "
+"KDE vizitoni <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Shfaq informacion për autorin"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Shfaq informacion për liçensën"
+
+#: lib/kaboutdata.cpp:1217
+#, fuzzy
+#| msgid "Enter the user name you want to run the application as."
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Vendosni emrin e përdoruesit që dëshironi për të nisur këtë program."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Programi u shkruajt nga dikush që dëshiron të ngelet anonim."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 u shkruajt nga\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Ju lutemi përdorni http://bugs.kde.org për të raportuar gabimet.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Ju lutemi raportoni gabimet tek %1.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgid "Misc"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Të Ndryshme"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tailandeze"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ndrysho"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Dërgo"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "@action:button filter-cancel"
+#| msgid "%1"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr ""
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "@action:button filter-cancel"
+#| msgid "%1"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr ""
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr ""
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "@action:button filter-cancel"
+#| msgid "%1"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr ""
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 day"
+#| msgid_plural "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "1 ditë"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 hour"
+#| msgid_plural "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "1 orë"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 minute"
+#| msgid_plural "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "1 minutë"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 second"
+#| msgid_plural "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "1 sekondë"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 second"
+#| msgid_plural "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "1 sekondë"
+msgstr[1] "1 sekondë"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 day"
+#| msgid_plural "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "1 ditë"
+msgstr[1] "1 ditë"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 hour"
+#| msgid_plural "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "1 orë"
+msgstr[1] "1 orë"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 minute"
+#| msgid_plural "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "1 minutë"
+msgstr[1] "1 minutë"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 second"
+#| msgid_plural "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "1 sekondë"
+msgstr[1] "1 sekondë"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 dhe %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "invalid flags"
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "flamurë të pavlefshëm"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext"
+#| msgid "1 day"
+#| msgid_plural "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "1 ditë"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Sot"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dje"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "1 minute"
+#| msgid_plural "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "1 minutë"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of date/time and time zone"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Albanian translation for kde4libs
+# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009
+# This file is distributed under the same license as the kde4libs package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kde4libs\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2009-07-31 03:07+0000\n"
+"Last-Translator: Vilson Gjeci <vilsongjeci@gmail.com>\n"
+"Language-Team: Albanian <sq@li.org>\n"
+"Language: sq\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-04-22 16:38+0000\n"
+"X-Generator: Launchpad (build 12883)\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Miniapliaktiv Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum import"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR image"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® hexadecimal object file"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows server"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows workgroup"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Dr. Geo figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Cabri figure"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind profile dump"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows workgroup"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ contact"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# Translation of kcoreaddons5_qt.po into Serbian.
+# Marko Rosic <roske@kde.org.yu>, 2003.
+# Toplica Tanaskovic <toptan@kde.org.yu>, 2003, 2004, 2005.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017.
+# Dalibor Djuric <daliborddjuric@gmail.com>, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2017-10-14 23:06+0200\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Environment: kde\n"
+"X-Wrapping: fine\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:283
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Нису наведени услови лиценцирања за овај програм.\n"
+"Проверите да ли су услови лиценцирања наведени у\n"
+"документацији или изворном коду.\n"
+
+#: lib/kaboutdata.cpp:293
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Услови за дистрибуирање програма: %1."
+
+#: lib/kaboutdata.cpp:339
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "ОЈЛ в2"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Гнуова Општа јавна лиценца, верзија 2"
+
+#: lib/kaboutdata.cpp:343
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "МОЈЛ в3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 2"
+
+#: lib/kaboutdata.cpp:347
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "БСД"
+
+#: lib/kaboutdata.cpp:348
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "БСД"
+
+#: lib/kaboutdata.cpp:351
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Уметничка"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Уметничка"
+
+#: lib/kaboutdata.cpp:355
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "КуПЛ 1.0"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Ку јавна лиценца"
+
+#: lib/kaboutdata.cpp:359
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "ОЈЛ в3"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Гнуова Општа јавна лиценца, верзија 3"
+
+#: lib/kaboutdata.cpp:363
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "МОЈЛ в3"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 3"
+
+#: lib/kaboutdata.cpp:367
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "МОЈЛ в2.1"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 2.1"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "(посебна)"
+
+#: lib/kaboutdata.cpp:375
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "(није наведена)"
+
+#: lib/kaboutdata.cpp:936
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<html><p>О преводу КДЕ‑а на српски језик можете читати на страницама <a "
+"href='http://sr.l10n.kde.org'>sr.l10n.kde.org</a>. Међу њима се налазе <a "
+"href='http://sr.l10n.kde.org/pojmovnik.php'>појмовник</a> и <a href='http://"
+"sr.l10n.kde.org/trapnakron/'>трапнакрон</a>, који вам могу послужити да "
+"разјасните појмове и повежете преведене с изворним изразима када год вам то "
+"затреба.</p><p>За детаљније информације о локализацији КДЕ‑а уопште, "
+"посетите <a href='https://l10n.kde.org'>https://l10n.kde.org</a>.</p></html>"
+
+#: lib/kaboutdata.cpp:1167
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Прикажи податке о ауторима."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Прикажи податке о лиценци."
+
+#: lib/kaboutdata.cpp:1170
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Основно име фајла ставке површи за овај програм."
+
+#: lib/kaboutdata.cpp:1171
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Име фајла"
+
+#: lib/kaboutdata.cpp:1180
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Овај програм је написао неко ко жели да остане анониман."
+
+#: lib/kaboutdata.cpp:1182
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 написали:"
+
+#: lib/kaboutdata.cpp:1193
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Користите https://bugs.kde.org за пријаву грешака."
+
+#: lib/kaboutdata.cpp:1195
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Пријавите грешке на %1."
+
+#: lib/plugin/kpluginloader.cpp:111
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Библиотека %1 не нуди KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:108
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:137
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:146
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:165
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:216
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:219
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:222
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:225
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:255
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:285
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1м%2,%3с"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:344
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1м%2с"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:348
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1ч%2м"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:352
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1ч%2м%3,%4с"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:358
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1ч%2м%3с"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:368
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:373 lib/util/kformatprivate.cpp:377
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:381
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:387
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:402
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дана"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:405
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 сати"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:408
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минута"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:411
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунди"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:416
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n милисекунда"
+msgstr[1] "%n милисекунде"
+msgstr[2] "%n милисекунди"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:434
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n дан"
+msgstr[1] "%n дана"
+msgstr[2] "%n дана"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:439
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n сат"
+msgstr[1] "%n сата"
+msgstr[2] "%n сати"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:444
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n минут"
+msgstr[1] "%n минута"
+msgstr[2] "%n минута"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:449
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n секунда"
+msgstr[1] "%n секунде"
+msgstr[2] "%n секунди"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:474 lib/util/kformatprivate.cpp:480
+#: lib/util/kformatprivate.cpp:486
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 и %2"
+
+#: lib/util/kformatprivate.cpp:497
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "лош датум"
+
+#: lib/util/kformatprivate.cpp:507
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n дан"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "сутра"
+
+#: lib/util/kformatprivate.cpp:511
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "данас"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "јуче"
+
+#: lib/util/kformatprivate.cpp:515
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:529
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:38
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:51
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Translation of xml_mimetypes5.po into Serbian.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2009, 2010, 2011, 2012, 2014, 2017.
+# Dalibor Djuric <dalibor.djuric@mozilla-srbija.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes5\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2020-01-17 02:56+0100\n"
+"PO-Revision-Date: 2017-12-15 12:37+0100\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: \n"
+"X-Text-Markup: xmlents\n"
+"X-Environment: kde\n"
+"X-Wrapping: fine\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgid "RELAX NG"
+msgstr "релакс НГ"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgid "CD audio"
+msgstr "ЦД аудио"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgid "SNF bitmap font"
+msgstr "СНФ битмапски фонт"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgid "Java applet"
+msgstr "јавански аплет"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgid "KHTML Extension Adaptor"
+msgstr "КХТМЛ‑ов адаптер проширења"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgid "KDE color scheme"
+msgstr "КДЕ шема боја"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgid "KNewStuff package"
+msgstr "пакет К‑свежих-новотарија"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgid "KWallet wallet"
+msgstr "К‑новчаников новчаник"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgid "Kugar report template"
+msgstr "Кугаров шаблон извештаја"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgid "plasmoid"
+msgstr "плазмоид"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgid "SuperKaramba theme"
+msgstr "суперкарамба тема"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgid "Calligra Plan project management document"
+msgstr "документ управљања пројектом Калигриног Плана"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgid "Calligra Plan work package document"
+msgstr "документ радног пакета Калигриног Плана"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgid "KPlato project management document"
+msgstr "К‑платоов документ управљања пројектом"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgid "KPlato project management work package"
+msgstr "К‑платоов радни пакет управљања пројектом"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgid "Kugar archive"
+msgstr "Кугарова архива"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgid "web archive"
+msgstr "веб архива"
+
+#: kde5.xml.podir/kde5.xml.in.h:20
+msgid "W3C XML schema"
+msgstr "В3Ц‑ова ИксМЛ шема"
+
+#: kde5.xml.podir/kde5.xml.in.h:22
+msgid "RealAudio plugin file"
+msgstr "Реалаудио прикључак"
+
+#: kde5.xml.podir/kde5.xml.in.h:24
+msgid "KPhotoAlbum import"
+msgstr "К‑фотоалбумов увоз"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgid "HDR image"
+msgstr "ХДР слика"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgid "KDE raw image formats"
+msgstr "КДЕ формати сирових слика"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgid "Intel® hexadecimal object file"
+msgstr "Интелов хексадекадни објектни фајл"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgid "Kate file list loader plugin list"
+msgstr "списак Кејтиног прикључка за учитавање фајлова"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgid "abc musical notation file"
+msgstr "музичка нотација АБЦ"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgid "fonts package"
+msgstr "пакет фонтова"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgid "Windows server"
+msgstr "виндоуз сервер"
+
+#: kde5.xml.podir/kde5.xml.in.h:33
+msgid "Windows workgroup"
+msgstr "виндоуз радна група"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgid "KDE system monitor"
+msgstr "КДЕ системски монитор"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgid "KDE theme"
+msgstr "КДЕ тема"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgid "Quanta project"
+msgstr "Квантин пројекат"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgid "Kommander file"
+msgstr "Командеров фајл"
+
+# >> KTuberling's file
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgid "potato"
+msgstr "Кромпирков фајл"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgid "Kolf saved game"
+msgstr "Колфова сачувана игра"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgid "Kolf course"
+msgstr "Колфов терен"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgid "Okular document archive"
+msgstr "Окуларова архива докумената"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgid "Cabri figure"
+msgstr "Кабријев цртеж"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgid "Dr. Geo figure"
+msgstr "Др Геов цртеж"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgid "KGeo figure"
+msgstr "К‑геов цртеж"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgid "Kig figure"
+msgstr "КИГ‑ов цртеж"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgid "KSeg document"
+msgstr "К‑сегов документ"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgid "vocabulary trainer document"
+msgstr "документ за увежбавање речника"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgid "KmPlot file"
+msgstr "К‑матцртов фајл"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgid "KWordQuiz vocabulary"
+msgstr "речник К‑квиза-ријечи"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Кешгриндов/Колгриндов профилни попис"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgid "Umbrello UML Modeller file"
+msgstr "Умбрелов фајл"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgid "Windows link"
+msgstr "виндоуз веза"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgid "KGet download list"
+msgstr "К‑гетова списак преузимања"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgid "Kopete emoticons archive"
+msgstr "Копетеова архива емотикона"
+
+#: kde5.xml.podir/kde5.xml.in.h:56
+msgid "ICQ contact"
+msgstr "ајсикју контакт"
+
+#: kde5.xml.podir/kde5.xml.in.h:58
+msgid "Microsoft Media Format"
+msgstr "Мајкрософтов медија формат"
+
+#: kde5.xml.podir/kde5.xml.in.h:60
+msgid "Turtle RDF document"
+msgstr "туртл РДФ документ"
+
+#: kde5.xml.podir/kde5.xml.in.h:62
+msgid "Softimage PIC image"
+msgstr "Софтимиџова ПИЦ слика"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgid "Qt Markup Language file"
+msgstr "фајл КуТ‑овог обележивачког језика"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgid "KConfigXT Configuration Options"
+msgstr "поставне опције К‑конфиг‑ИксТ‑а"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgid "KConfigXT Code Generation Options"
+msgstr "опције генерисања кода К‑конфиг‑ИксТ‑а"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgid "KXMLGUI UI Declaration"
+msgstr "декларације за KXmlGui"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgid "KNotification Declaration"
+msgstr "декларације за KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:69
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# Translation of kcoreaddons5_qt.po into Serbian.
+# Marko Rosic <roske@kde.org.yu>, 2003.
+# Toplica Tanaskovic <toptan@kde.org.yu>, 2003, 2004, 2005.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017.
+# Dalibor Djuric <daliborddjuric@gmail.com>, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2017-10-14 23:06+0200\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr@ijekavian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Environment: kde\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:283
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Нису наведени услови лиценцирања за овај програм.\n"
+"Провјерите да ли су услови лиценцирања наведени у\n"
+"документацији или изворном коду.\n"
+
+#: lib/kaboutdata.cpp:293
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Услови за дистрибуирање програма: %1."
+
+#: lib/kaboutdata.cpp:339
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "ОЈЛ в2"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Гнуова Општа јавна лиценца, верзија 2"
+
+#: lib/kaboutdata.cpp:343
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "МОЈЛ в3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 2"
+
+#: lib/kaboutdata.cpp:347
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "БСД"
+
+#: lib/kaboutdata.cpp:348
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "БСД"
+
+#: lib/kaboutdata.cpp:351
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Умјетничка"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Умјетничка"
+
+#: lib/kaboutdata.cpp:355
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "КуПЛ 1.0"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Ку јавна лиценца"
+
+#: lib/kaboutdata.cpp:359
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "ОЈЛ в3"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Гнуова Општа јавна лиценца, верзија 3"
+
+#: lib/kaboutdata.cpp:363
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "МОЈЛ в3"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 3"
+
+#: lib/kaboutdata.cpp:367
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "МОЈЛ в2.1"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Гнуова Мања општа јавна лиценца, верзија 2.1"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "(посебна)"
+
+#: lib/kaboutdata.cpp:375
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "(није наведена)"
+
+#: lib/kaboutdata.cpp:936
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<html><p>О преводу КДЕ‑а на српски језик можете читати на страницама <a "
+"href='http://sr.l10n.kde.org'>sr.l10n.kde.org</a>. Међу њима се налазе <a "
+"href='http://sr.l10n.kde.org/pojmovnik.php'>појмовник</a> и <a href='http://"
+"sr.l10n.kde.org/trapnakron/'>трапнакрон</a>, који вам могу послужити да "
+"разјасните појмове и повежете преведене с изворним изразима када год вам то "
+"затреба.</p><p>За детаљније информације о локализацији КДЕ‑а уопште, "
+"посјетите <a href='https://l10n.kde.org'>https://l10n.kde.org</a>.</p></html>"
+
+#: lib/kaboutdata.cpp:1167
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Прикажи податке о ауторима."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Прикажи податке о лиценци."
+
+#: lib/kaboutdata.cpp:1170
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Основно име фајла ставке површи за овај програм."
+
+#: lib/kaboutdata.cpp:1171
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Име фајла"
+
+#: lib/kaboutdata.cpp:1180
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Овај програм је написао неко ко жели да остане анониман."
+
+#: lib/kaboutdata.cpp:1182
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 написали:"
+
+#: lib/kaboutdata.cpp:1193
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Користите https://bugs.kde.org за пријаву грешака."
+
+#: lib/kaboutdata.cpp:1195
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Пријавите грешке на %1."
+
+#: lib/plugin/kpluginloader.cpp:111
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Библиотека %1 не нуди KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:108
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:137
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:146
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:165
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:216
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:219
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:222
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:225
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:255
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:285
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1м%2,%3с"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:344
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1м%2с"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:348
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1ч%2м"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:352
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1ч%2м%3,%4с"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:358
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1ч%2м%3с"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:368
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:373 lib/util/kformatprivate.cpp:377
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:381
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:387
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:402
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 дана"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:405
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 сати"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:408
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минута"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:411
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунди"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:416
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n милисекунда"
+msgstr[1] "%n милисекунде"
+msgstr[2] "%n милисекунди"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:434
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n дан"
+msgstr[1] "%n дана"
+msgstr[2] "%n дана"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:439
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n сат"
+msgstr[1] "%n сата"
+msgstr[2] "%n сати"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:444
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n минут"
+msgstr[1] "%n минута"
+msgstr[2] "%n минута"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:449
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n секунда"
+msgstr[1] "%n секунде"
+msgstr[2] "%n секунди"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:474 lib/util/kformatprivate.cpp:480
+#: lib/util/kformatprivate.cpp:486
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 и %2"
+
+#: lib/util/kformatprivate.cpp:497
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "лош датум"
+
+#: lib/util/kformatprivate.cpp:507
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n дан"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "сутра"
+
+#: lib/util/kformatprivate.cpp:511
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "данас"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "јуче"
+
+#: lib/util/kformatprivate.cpp:515
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:529
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:38
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:51
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Translation of xml_mimetypes5.po into Serbian.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2009, 2010, 2011, 2012, 2014, 2017.
+# Dalibor Djuric <dalibor.djuric@mozilla-srbija.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes5\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2020-01-17 02:56+0100\n"
+"PO-Revision-Date: 2017-12-15 12:37+0100\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr@ijekavian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: \n"
+"X-Text-Markup: xmlents\n"
+"X-Environment: kde\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgid "RELAX NG"
+msgstr "релакс НГ"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgid "CD audio"
+msgstr "ЦД аудио"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgid "SNF bitmap font"
+msgstr "СНФ битмапски фонт"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgid "Java applet"
+msgstr "јавански аплет"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgid "KHTML Extension Adaptor"
+msgstr "КХТМЛ‑ов адаптер проширења"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgid "KDE color scheme"
+msgstr "КДЕ шема боја"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgid "KNewStuff package"
+msgstr "пакет К‑свежих-новотарија"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgid "KWallet wallet"
+msgstr "К‑новчаников новчаник"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgid "Kugar report template"
+msgstr "Кугаров шаблон извештаја"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgid "plasmoid"
+msgstr "плазмоид"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgid "SuperKaramba theme"
+msgstr "суперкарамба тема"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgid "Calligra Plan project management document"
+msgstr "документ управљања пројектом Калигриног Плана"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgid "Calligra Plan work package document"
+msgstr "документ радног пакета Калигриног Плана"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgid "KPlato project management document"
+msgstr "К‑платоов документ управљања пројектом"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgid "KPlato project management work package"
+msgstr "К‑платоов радни пакет управљања пројектом"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgid "Kugar archive"
+msgstr "Кугарова архива"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgid "web archive"
+msgstr "веб архива"
+
+#: kde5.xml.podir/kde5.xml.in.h:20
+msgid "W3C XML schema"
+msgstr "В3Ц‑ова ИксМЛ шема"
+
+#: kde5.xml.podir/kde5.xml.in.h:22
+msgid "RealAudio plugin file"
+msgstr "Реалаудио прикључак"
+
+#: kde5.xml.podir/kde5.xml.in.h:24
+msgid "KPhotoAlbum import"
+msgstr "К‑фотоалбумов увоз"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgid "HDR image"
+msgstr "ХДР слика"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgid "KDE raw image formats"
+msgstr "КДЕ формати сирових слика"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgid "Intel® hexadecimal object file"
+msgstr "Интелов хексадекадни објектни фајл"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgid "Kate file list loader plugin list"
+msgstr "списак Кејтиног прикључка за учитавање фајлова"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgid "abc musical notation file"
+msgstr "музичка нотација АБЦ"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgid "fonts package"
+msgstr "пакет фонтова"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgid "Windows server"
+msgstr "виндоуз сервер"
+
+#: kde5.xml.podir/kde5.xml.in.h:33
+msgid "Windows workgroup"
+msgstr "виндоуз радна група"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgid "KDE system monitor"
+msgstr "КДЕ системски монитор"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgid "KDE theme"
+msgstr "КДЕ тема"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgid "Quanta project"
+msgstr "Квантин пројекат"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgid "Kommander file"
+msgstr "Командеров фајл"
+
+# >> KTuberling's file
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgid "potato"
+msgstr "Кромпирков фајл"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgid "Kolf saved game"
+msgstr "Колфова сачувана игра"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgid "Kolf course"
+msgstr "Колфов терен"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgid "Okular document archive"
+msgstr "Окуларова архива докумената"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgid "Cabri figure"
+msgstr "Кабријев цртеж"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgid "Dr. Geo figure"
+msgstr "Др Геов цртеж"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgid "KGeo figure"
+msgstr "К‑геов цртеж"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgid "Kig figure"
+msgstr "КИГ‑ов цртеж"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgid "KSeg document"
+msgstr "К‑сегов документ"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgid "vocabulary trainer document"
+msgstr "документ за увјежбавање рјечника"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgid "KmPlot file"
+msgstr "К‑матцртов фајл"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgid "KWordQuiz vocabulary"
+msgstr "речник К‑квиза-ријечи"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Кешгриндов/Колгриндов профилни попис"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgid "Umbrello UML Modeller file"
+msgstr "Умбрелов фајл"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgid "Windows link"
+msgstr "виндоуз веза"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgid "KGet download list"
+msgstr "К‑гетова списак преузимања"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgid "Kopete emoticons archive"
+msgstr "Копетеова архива емотикона"
+
+#: kde5.xml.podir/kde5.xml.in.h:56
+msgid "ICQ contact"
+msgstr "ајсикју контакт"
+
+#: kde5.xml.podir/kde5.xml.in.h:58
+msgid "Microsoft Media Format"
+msgstr "Мајкрософтов медија формат"
+
+#: kde5.xml.podir/kde5.xml.in.h:60
+msgid "Turtle RDF document"
+msgstr "туртл РДФ документ"
+
+#: kde5.xml.podir/kde5.xml.in.h:62
+msgid "Softimage PIC image"
+msgstr "Софтимиџова ПИЦ слика"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgid "Qt Markup Language file"
+msgstr "фајл КуТ‑овог обележивачког језика"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgid "KConfigXT Configuration Options"
+msgstr "поставне опције К‑конфиг‑ИксТ‑а"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgid "KConfigXT Code Generation Options"
+msgstr "опције генерисања кода К‑конфиг‑ИксТ‑а"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgid "KXMLGUI UI Declaration"
+msgstr "декларације за KXmlGui"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgid "KNotification Declaration"
+msgstr "декларације за KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:69
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# Translation of kcoreaddons5_qt.po into Serbian.
+# Marko Rosic <roske@kde.org.yu>, 2003.
+# Toplica Tanaskovic <toptan@kde.org.yu>, 2003, 2004, 2005.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017.
+# Dalibor Djuric <daliborddjuric@gmail.com>, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2017-10-14 23:06+0200\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr@ijekavianlatin\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Environment: kde\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:283
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nisu navedeni uslovi licenciranja za ovaj program.\n"
+"Provjerite da li su uslovi licenciranja navedeni u\n"
+"dokumentaciji ili izvornom kodu.\n"
+
+#: lib/kaboutdata.cpp:293
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Uslovi za distribuiranje programa: %1."
+
+#: lib/kaboutdata.cpp:339
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "OJL v2"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU‑ova Opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:343
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "MOJL v3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:347
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD"
+
+#: lib/kaboutdata.cpp:348
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD"
+
+#: lib/kaboutdata.cpp:351
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Umjetnička"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Umjetnička"
+
+#: lib/kaboutdata.cpp:355
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL 1.0"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q javna licenca"
+
+#: lib/kaboutdata.cpp:359
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "OJL v3"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU‑ova Opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:363
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "MOJL v3"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:367
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "MOJL v2.1"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 2.1"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "(posebna)"
+
+#: lib/kaboutdata.cpp:375
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "(nije navedena)"
+
+#: lib/kaboutdata.cpp:936
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<html><p>O prevodu KDE‑a na srpski jezik možete čitati na stranicama <a "
+"href='http://sr.l10n.kde.org'>sr.l10n.kde.org</a>. Među njima se nalaze <a "
+"href='http://sr.l10n.kde.org/pojmovnik.php'>pojmovnik</a> i <a href='http://"
+"sr.l10n.kde.org/trapnakron/'>trapnakron</a>, koji vam mogu poslužiti da "
+"razjasnite pojmove i povežete prevedene s izvornim izrazima kada god vam to "
+"zatreba.</p><p>Za detaljnije informacije o lokalizaciji KDE‑a uopšte, "
+"posjetite <a href='https://l10n.kde.org'>https://l10n.kde.org</a>.</p></html>"
+
+#: lib/kaboutdata.cpp:1167
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Prikaži podatke o autorima."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Prikaži podatke o licenci."
+
+#: lib/kaboutdata.cpp:1170
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Osnovno ime fajla stavke površi za ovaj program."
+
+#: lib/kaboutdata.cpp:1171
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Ime fajla"
+
+#: lib/kaboutdata.cpp:1180
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ovaj program je napisao neko ko želi da ostane anoniman."
+
+#: lib/kaboutdata.cpp:1182
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 napisali:"
+
+#: lib/kaboutdata.cpp:1193
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Koristite https://bugs.kde.org za prijavu grešaka."
+
+#: lib/kaboutdata.cpp:1195
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prijavite greške na %1."
+
+#: lib/plugin/kpluginloader.cpp:111
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka %1 ne nudi KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:108
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:137
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:146
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:165
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:216
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:219
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:222
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:225
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:255
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:285
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:344
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:348
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1č%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:352
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1č%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:358
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1č%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:368
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:373 lib/util/kformatprivate.cpp:377
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:381
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:387
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:402
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dana"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:405
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 sati"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:408
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuta"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:411
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundi"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:416
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekunde"
+msgstr[2] "%n milisekundi"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:434
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dan"
+msgstr[1] "%n dana"
+msgstr[2] "%n dana"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:439
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n sat"
+msgstr[1] "%n sata"
+msgstr[2] "%n sati"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:444
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minuta"
+msgstr[2] "%n minuta"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:449
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekunde"
+msgstr[2] "%n sekundi"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:474 lib/util/kformatprivate.cpp:480
+#: lib/util/kformatprivate.cpp:486
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:497
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "loš datum"
+
+#: lib/util/kformatprivate.cpp:507
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n dan"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "sutra"
+
+#: lib/util/kformatprivate.cpp:511
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "danas"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "juče"
+
+#: lib/util/kformatprivate.cpp:515
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:529
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:38
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:51
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Translation of xml_mimetypes5.po into Serbian.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2009, 2010, 2011, 2012, 2014, 2017.
+# Dalibor Djuric <dalibor.djuric@mozilla-srbija.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes5\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2020-01-17 02:56+0100\n"
+"PO-Revision-Date: 2017-12-15 12:37+0100\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr@ijekavianlatin\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: \n"
+"X-Text-Markup: xmlents\n"
+"X-Environment: kde\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgid "RELAX NG"
+msgstr "Relax NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgid "CD audio"
+msgstr "CD audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgid "SNF bitmap font"
+msgstr "SNF bitmapski font"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgid "Java applet"
+msgstr "javanski aplet"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML‑ov adapter proširenja"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgid "KDE color scheme"
+msgstr "KDE šema boja"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgid "KNewStuff package"
+msgstr "paket K‑svežih-novotarija"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgid "KWallet wallet"
+msgstr "K‑novčanikov novčanik"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgid "Kugar report template"
+msgstr "Kugarov šablon izveštaja"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgid "plasmoid"
+msgstr "plazmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgid "SuperKaramba theme"
+msgstr "superkaramba tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgid "Calligra Plan project management document"
+msgstr "dokument upravljanja projektom Calligrinog Plana"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgid "Calligra Plan work package document"
+msgstr "dokument radnog paketa Calligrinog Plana"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgid "KPlato project management document"
+msgstr "KPlatoov dokument upravljanja projektom"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgid "KPlato project management work package"
+msgstr "KPlatoov radni paket upravljanja projektom"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgid "Kugar archive"
+msgstr "Kugarova arhiva"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgid "web archive"
+msgstr "veb arhiva"
+
+#: kde5.xml.podir/kde5.xml.in.h:20
+msgid "W3C XML schema"
+msgstr "W3C‑ova XML šema"
+
+#: kde5.xml.podir/kde5.xml.in.h:22
+msgid "RealAudio plugin file"
+msgstr "RealAudio priključak"
+
+#: kde5.xml.podir/kde5.xml.in.h:24
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbumov uvoz"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgid "HDR image"
+msgstr "HDR slika"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgid "KDE raw image formats"
+msgstr "KDE formati sirovih slika"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgid "Intel® hexadecimal object file"
+msgstr "Intelov heksadekadni objektni fajl"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgid "Kate file list loader plugin list"
+msgstr "spisak Kateinog priključka za učitavanje fajlova"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgid "abc musical notation file"
+msgstr "muzička notacija ABC"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgid "fonts package"
+msgstr "paket fontova"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgid "Windows server"
+msgstr "windows server"
+
+#: kde5.xml.podir/kde5.xml.in.h:33
+msgid "Windows workgroup"
+msgstr "windows radna grupa"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgid "KDE system monitor"
+msgstr "KDE sistemski monitor"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgid "KDE theme"
+msgstr "KDE tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgid "Quanta project"
+msgstr "Quantin projekat"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgid "Kommander file"
+msgstr "Kommanderov fajl"
+
+# >> KTuberling's file
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgid "potato"
+msgstr "Krompirkov fajl"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgid "Kolf saved game"
+msgstr "Kolfova sačuvana igra"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgid "Kolf course"
+msgstr "Kolfov teren"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgid "Okular document archive"
+msgstr "Okularova arhiva dokumenata"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgid "Cabri figure"
+msgstr "Cabrijev crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgid "Dr. Geo figure"
+msgstr "Dr Geov crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgid "KGeo figure"
+msgstr "KGeov crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgid "Kig figure"
+msgstr "KIG‑ov crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgid "KSeg document"
+msgstr "KSegov dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgid "vocabulary trainer document"
+msgstr "dokument za uvježbavanje rječnika"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgid "KmPlot file"
+msgstr "K‑matcrtov fajl"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgid "KWordQuiz vocabulary"
+msgstr "rečnik K‑kviza-riječi"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrindov/Callgrindov profilni popis"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrellov fajl"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgid "Windows link"
+msgstr "windows veza"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgid "KGet download list"
+msgstr "KGetova spisak preuzimanja"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgid "Kopete emoticons archive"
+msgstr "Kopeteova arhiva emotikona"
+
+#: kde5.xml.podir/kde5.xml.in.h:56
+msgid "ICQ contact"
+msgstr "ICQ kontakt"
+
+#: kde5.xml.podir/kde5.xml.in.h:58
+msgid "Microsoft Media Format"
+msgstr "Microsoftov medija format"
+
+#: kde5.xml.podir/kde5.xml.in.h:60
+msgid "Turtle RDF document"
+msgstr "Turtle RDF dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:62
+msgid "Softimage PIC image"
+msgstr "Softimidžova PIC slika"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgid "Qt Markup Language file"
+msgstr "fajl Qt‑ovog obeleživačkog jezika"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgid "KConfigXT Configuration Options"
+msgstr "postavne opcije KConfigXT‑a"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgid "KConfigXT Code Generation Options"
+msgstr "opcije generisanja koda KConfigXT‑a"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgid "KXMLGUI UI Declaration"
+msgstr "deklaracije za KXmlGui"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgid "KNotification Declaration"
+msgstr "deklaracije za KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:69
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# Translation of kcoreaddons5_qt.po into Serbian.
+# Marko Rosic <roske@kde.org.yu>, 2003.
+# Toplica Tanaskovic <toptan@kde.org.yu>, 2003, 2004, 2005.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017.
+# Dalibor Djuric <daliborddjuric@gmail.com>, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2017-10-14 23:06+0200\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr@latin\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: &\n"
+"X-Text-Markup: qtrich\n"
+"X-Environment: kde\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:283
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Nisu navedeni uslovi licenciranja za ovaj program.\n"
+"Proverite da li su uslovi licenciranja navedeni u\n"
+"dokumentaciji ili izvornom kodu.\n"
+
+#: lib/kaboutdata.cpp:293
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Uslovi za distribuiranje programa: %1."
+
+#: lib/kaboutdata.cpp:339
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "OJL v2"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU‑ova Opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:343
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "MOJL v3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 2"
+
+#: lib/kaboutdata.cpp:347
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD"
+
+#: lib/kaboutdata.cpp:348
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD"
+
+#: lib/kaboutdata.cpp:351
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Umetnička"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Umetnička"
+
+#: lib/kaboutdata.cpp:355
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL 1.0"
+
+#: lib/kaboutdata.cpp:356
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q javna licenca"
+
+#: lib/kaboutdata.cpp:359
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "OJL v3"
+
+#: lib/kaboutdata.cpp:360
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU‑ova Opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:363
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "MOJL v3"
+
+#: lib/kaboutdata.cpp:364
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 3"
+
+#: lib/kaboutdata.cpp:367
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "MOJL v2.1"
+
+#: lib/kaboutdata.cpp:368
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU‑ova Manja opšta javna licenca, verzija 2.1"
+
+#: lib/kaboutdata.cpp:372
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "(posebna)"
+
+#: lib/kaboutdata.cpp:375
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "(nije navedena)"
+
+#: lib/kaboutdata.cpp:936
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<html><p>O prevodu KDE‑a na srpski jezik možete čitati na stranicama <a "
+"href='http://sr.l10n.kde.org'>sr.l10n.kde.org</a>. Među njima se nalaze <a "
+"href='http://sr.l10n.kde.org/pojmovnik.php'>pojmovnik</a> i <a href='http://"
+"sr.l10n.kde.org/trapnakron/'>trapnakron</a>, koji vam mogu poslužiti da "
+"razjasnite pojmove i povežete prevedene s izvornim izrazima kada god vam to "
+"zatreba.</p><p>Za detaljnije informacije o lokalizaciji KDE‑a uopšte, "
+"posetite <a href='https://l10n.kde.org'>https://l10n.kde.org</a>.</p></html>"
+
+#: lib/kaboutdata.cpp:1167
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Prikaži podatke o autorima."
+
+#: lib/kaboutdata.cpp:1168
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Prikaži podatke o licenci."
+
+#: lib/kaboutdata.cpp:1170
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Osnovno ime fajla stavke površi za ovaj program."
+
+#: lib/kaboutdata.cpp:1171
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Ime fajla"
+
+#: lib/kaboutdata.cpp:1180
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ovaj program je napisao neko ko želi da ostane anoniman."
+
+#: lib/kaboutdata.cpp:1182
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 napisali:"
+
+#: lib/kaboutdata.cpp:1193
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Koristite https://bugs.kde.org za prijavu grešaka."
+
+#: lib/kaboutdata.cpp:1195
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Prijavite greške na %1."
+
+#: lib/plugin/kpluginloader.cpp:111
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteka %1 ne nudi KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:108
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:117
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:118
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:119
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:120
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:137
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:146
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr ""
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:165
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr ""
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:216
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:219
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:222
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:225
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:228
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:231
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:234
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:237
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:240
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:246
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:249
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:252
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:255
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:258
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:261
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:264
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:267
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:270
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:276
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:279
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:282
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:285
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:288
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:291
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:294
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:297
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:300
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2,%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:344
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:348
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1č%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:352
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1č%2m%3,%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:358
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1č%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:368
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:373 lib/util/kformatprivate.cpp:377
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1.%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:381
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1.%2.%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:387
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1.%2.%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:402
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dana"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:405
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 sati"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:408
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuta"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:411
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekundi"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:416
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisekunda"
+msgstr[1] "%n milisekunde"
+msgstr[2] "%n milisekundi"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:434
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dan"
+msgstr[1] "%n dana"
+msgstr[2] "%n dana"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:439
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n sat"
+msgstr[1] "%n sata"
+msgstr[2] "%n sati"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:444
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minuta"
+msgstr[2] "%n minuta"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:449
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekunda"
+msgstr[1] "%n sekunde"
+msgstr[2] "%n sekundi"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:474 lib/util/kformatprivate.cpp:480
+#: lib/util/kformatprivate.cpp:486
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 i %2"
+
+#: lib/util/kformatprivate.cpp:497
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "loš datum"
+
+#: lib/util/kformatprivate.cpp:507
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n dan"
+
+#: lib/util/kformatprivate.cpp:509
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "sutra"
+
+#: lib/util/kformatprivate.cpp:511
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "danas"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "juče"
+
+#: lib/util/kformatprivate.cpp:515
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:529
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:38
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_unix.cpp:51
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Translation of xml_mimetypes5.po into Serbian.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2009, 2010, 2011, 2012, 2014, 2017.
+# Dalibor Djuric <dalibor.djuric@mozilla-srbija.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes5\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2020-01-17 02:56+0100\n"
+"PO-Revision-Date: 2017-12-15 12:37+0100\n"
+"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
+"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
+"Language: sr@latin\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Accelerator-Marker: \n"
+"X-Text-Markup: xmlents\n"
+"X-Environment: kde\n"
+"X-Wrapping: fine\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgid "RELAX NG"
+msgstr "Relax NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgid "CD audio"
+msgstr "CD audio"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgid "SNF bitmap font"
+msgstr "SNF bitmapski font"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgid "Java applet"
+msgstr "javanski aplet"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML‑ov adapter proširenja"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgid "KDE color scheme"
+msgstr "KDE šema boja"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgid "KNewStuff package"
+msgstr "paket K‑svežih-novotarija"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgid "KWallet wallet"
+msgstr "K‑novčanikov novčanik"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgid "Kugar report template"
+msgstr "Kugarov šablon izveštaja"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgid "plasmoid"
+msgstr "plazmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgid "SuperKaramba theme"
+msgstr "superkaramba tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgid "Calligra Plan project management document"
+msgstr "dokument upravljanja projektom Calligrinog Plana"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgid "Calligra Plan work package document"
+msgstr "dokument radnog paketa Calligrinog Plana"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgid "KPlato project management document"
+msgstr "KPlatoov dokument upravljanja projektom"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgid "KPlato project management work package"
+msgstr "KPlatoov radni paket upravljanja projektom"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgid "Kugar archive"
+msgstr "Kugarova arhiva"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgid "web archive"
+msgstr "veb arhiva"
+
+#: kde5.xml.podir/kde5.xml.in.h:20
+msgid "W3C XML schema"
+msgstr "W3C‑ova XML šema"
+
+#: kde5.xml.podir/kde5.xml.in.h:22
+msgid "RealAudio plugin file"
+msgstr "RealAudio priključak"
+
+#: kde5.xml.podir/kde5.xml.in.h:24
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbumov uvoz"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgid "HDR image"
+msgstr "HDR slika"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgid "KDE raw image formats"
+msgstr "KDE formati sirovih slika"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgid "Intel® hexadecimal object file"
+msgstr "Intelov heksadekadni objektni fajl"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgid "Kate file list loader plugin list"
+msgstr "spisak Kateinog priključka za učitavanje fajlova"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgid "abc musical notation file"
+msgstr "muzička notacija ABC"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgid "fonts package"
+msgstr "paket fontova"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgid "Windows server"
+msgstr "windows server"
+
+#: kde5.xml.podir/kde5.xml.in.h:33
+msgid "Windows workgroup"
+msgstr "windows radna grupa"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgid "KDE system monitor"
+msgstr "KDE sistemski monitor"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgid "KDE theme"
+msgstr "KDE tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgid "Quanta project"
+msgstr "Quantin projekat"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgid "Kommander file"
+msgstr "Kommanderov fajl"
+
+# >> KTuberling's file
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgid "potato"
+msgstr "Krompirkov fajl"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgid "Kolf saved game"
+msgstr "Kolfova sačuvana igra"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgid "Kolf course"
+msgstr "Kolfov teren"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgid "Okular document archive"
+msgstr "Okularova arhiva dokumenata"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgid "Cabri figure"
+msgstr "Cabrijev crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgid "Dr. Geo figure"
+msgstr "Dr Geov crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgid "KGeo figure"
+msgstr "KGeov crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgid "Kig figure"
+msgstr "KIG‑ov crtež"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgid "KSeg document"
+msgstr "KSegov dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgid "vocabulary trainer document"
+msgstr "dokument za uvežbavanje rečnika"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgid "KmPlot file"
+msgstr "K‑matcrtov fajl"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgid "KWordQuiz vocabulary"
+msgstr "rečnik K‑kviza-riječi"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrindov/Callgrindov profilni popis"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrellov fajl"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgid "Windows link"
+msgstr "windows veza"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgid "KGet download list"
+msgstr "KGetova spisak preuzimanja"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgid "Kopete emoticons archive"
+msgstr "Kopeteova arhiva emotikona"
+
+#: kde5.xml.podir/kde5.xml.in.h:56
+msgid "ICQ contact"
+msgstr "ICQ kontakt"
+
+#: kde5.xml.podir/kde5.xml.in.h:58
+msgid "Microsoft Media Format"
+msgstr "Microsoftov medija format"
+
+#: kde5.xml.podir/kde5.xml.in.h:60
+msgid "Turtle RDF document"
+msgstr "Turtle RDF dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:62
+msgid "Softimage PIC image"
+msgstr "Softimidžova PIC slika"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgid "Qt Markup Language file"
+msgstr "fajl Qt‑ovog obeleživačkog jezika"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgid "KConfigXT Configuration Options"
+msgstr "postavne opcije KConfigXT‑a"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgid "KConfigXT Code Generation Options"
+msgstr "opcije generisanja koda KConfigXT‑a"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgid "KXMLGUI UI Declaration"
+msgstr "deklaracije za KXmlGui"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgid "KNotification Declaration"
+msgstr "deklaracije za KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:69
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# Stefan Asserhäll <stefan.asserhall@bredband.net>, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2020-11-17 06:37+0100\n"
+"Last-Translator: Stefan Asserhäll <stefan.asserhall@bredband.net>\n"
+"Language-Team: Swedish <kde-i18n-doc@kde.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Qt-Contexts: true\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 19.04.3\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Inga licensvillkor har angetts för det här programmet.\n"
+"Konsultera dokumentationen eller källkoden för\n"
+"eventuella licensvillkor.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Det här programmet distribueras under villkoren i %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License Version 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License Version 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD-licens"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD-licens"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistisk licens"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistisk licens"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License Version 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License Version 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License Version 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Egen"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Inte angiven"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE översätts till många olika språk tack vare alla översättargrupper "
+"världen över.</p><p>Besök <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a> för mer information om internationalisering av KDE.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Visa information om upphovsman."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Visa licensinformation."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Basfilnamnet på skrivbordsposten för programmet."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "filnamn"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Programmet är skrivet av någon som vill förbli anonym."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 är skriven av:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Använd https://bugs.kde.org för att rapportera fel."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Rapportera fel till %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Biblioteket %1 erbjuder inte en KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kbyte"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mbyte"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Gbyte"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Tbyte"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Pbyte"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Ebyte"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zbyte"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Ybyte"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 Kibyte"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mibyte"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Gibyte"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Tibyte"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Pibyte"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Eibyte"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zibyte"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yibyte"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 Kibyte"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 Mibyte"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 Gibyte"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 Tibyte"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 Pibyte"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 Eibyte"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 Zibyte"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 Yibyte"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1 m %2,%3 s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1 m %2 s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1 t %2 m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1 t %2 m %3,%4 s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1 t %2 m %3 s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 dagar"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 timmar"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 minuter"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 sekunder"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n millisekund"
+msgstr[1] "%n millisekunder"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n dag"
+msgstr[1] "%n dagar"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n timme"
+msgstr[1] "%n timmar"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n minut"
+msgstr[1] "%n minuter"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n sekund"
+msgstr[1] "%n sekunder"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 och %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ogiltigt datum"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Om två dagar"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Imorgon"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Idag"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Igår"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "För två dagar sedan"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Just nu"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "För %1 minuter sedan"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Sökvägen %1 finns inte"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Misslyckades köra `lsof' felkod %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob stöds inte på Windows"
--- /dev/null
+# translation of xml_mimetypes.po to Swedish
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Stefan Asserhäll <stefan.asserhall@bredband.net>, 2009, 2010.
+# Stefan Asserhall <stefan.asserhall@bredband.net>, 2010, 2011, 2014, 2017, 2020.
+# Arve Eriksson <031299870@telia.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-26 06:55+0100\n"
+"Last-Translator: Stefan Asserhäll <stefan.asserhall@bredband.net>\n"
+"Language-Team: Swedish <kde-i18n-doc@kde.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 19.04.3\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "Cd-ljud"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF punktavbildat teckensnitt"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java-miniprogram"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML-utökningsanpassning"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE-färgschema"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Heta nyheter-paket"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Kwallet-plånbok"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar-rapportmall"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Superkaramba-tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan-projekthanteringsdokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan-arbetspaketsdokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Kplato-projekthantering dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Kplato-projekthantering arbetspaket"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar-arkiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "webbarkiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML-schema"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Realaudio-insticksprogramfil"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Kfotoalbum-import"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR-bild"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE-obehandlade bildformat"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® hexadecimal objektfil"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate insticksprogramlista för laddning av fillistor"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc-musiknotationsfil"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "teckensnittspaket"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows-server"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows-arbetsgrupp"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE-systemövervakare"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE-tema"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta-projekt"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander-fil"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "potatis"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf sparat spel"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolfbana"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular-dokumentarkiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Kgeo-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig-figur"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Kseg-dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "dokument för ordförrådsövning"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Kmplot-fil"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Kwordquiz-ordförråd"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind-profileringsutskrift"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML-modelleringsfil"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows-länk"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Kget-nerladdningslista"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete-smilisarkiv"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ-kontakt"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft mediaformat"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF-dokument"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC-bild"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt-taggspråkfil"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT-inställningsalternativ"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT-kodgenereringsalternativ"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI-användargränssnittsdeklaration"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification-deklaration"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash-rapport"
--- /dev/null
+# translation of kdelibs4.po to தமிழ்
+# Copyright (C) 2000,2002, 2004, 2007, 2008 Free Software Foundation, Inc.
+#
+# Sivakumar Shanmugasundaram <sshanmu@yahoo.com>, 2000.
+# Thuraiappah Vaseeharan <t_vasee@yahoo.com>, 2000-2001.
+# ம. ஸ்ரீ ராமதாஸ் | Sri Ramadoss M <amachu@yavarkkum.org>, 2007-2012.
+# Kishore G <kishore96@gmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-05-15 20:12+0530\n"
+"Last-Translator: Kishore G <kishore96@gmail.com>\n"
+"Language-Team: Tamil <kde-i18n-doc@kde.org>\n"
+"Language: ta\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 21.04.1\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"இந்த நிரலுக்கான உரிமம் குறிப்பிடப்படவில்லை.\n"
+"உரிம விதிகளை பற்றிய விவரங்களுக்கு இந்நிரலின்\n"
+"ஆவணங்களை அல்லது அதன் மூலத்தைப் பார்க்கவும்.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "%1 உரிமத்தின் கீழ் இந்நிரல் விநியோகிக்கப்படுகிறது. "
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "குனு பொதுமக்கள் உரிமம் பதிப்பு 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "குனு சிறுநிலை பொதுமக்கள் உரிமம் பதிப்பு 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD உரிமம்"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD உரிமம்"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "கலைக்கான உரிமம்"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "கலைக்கான உரிமம்"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q பொது உரிமம்"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "குனு பொதுமக்கள் உரிமம் பதிப்பு 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "குனு சிறுநிலை பொதுமக்கள் உரிமம் பதிப்பு 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "குனு சிறுநிலை பொதுமக்கள் உரிமம் பதிப்பு 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "தனிப்பட்ட"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "குறிப்பிடப்படவில்லை"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>உலகளாவிய மொழிபெயர்ப்பு குழுகளால் கே.டீ.யீ. உலகின் பல மொழிகளில் "
+"மொழிபெயர்க்கப்படுகிறது.</p><p>கே.டீ.யீ. சர்வதேசமயமாக்கத்தை பற்றி மேலும் அறிய <a href="
+"\"http://l10n.kde.org\">http://l10n.kde.org</a> என்ற இணையதளத்திற்கு செல்லவும்</p> "
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "இயற்றியவரது விவரத்தைக் காட்டு."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "உரிமத் விவரங்களை காட்டு."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+"இந்த செயலிக்கான desktop பதிவின் அடிப்படை கோப்பு பெயர் (அதாவது வகைப்பெயர் இல்லாதது)."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "கோப்பின் பெயர்"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "தம்மை வெளிப்படுத்திக் கொள்ள விரும்பாத ஒருவரால் இப் பயன்பாடு இயற்றப் பட்டுள்ளது."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1-ஐ எழுதியவர்:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "பிழைகளைத் தாக்கல் செய்ய http://bugs.kde.org தனை பயன்படுத்துங்கள்."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "பிழைகளை %1-க்குத் தெரியப்படுத்துங்கள்."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 என்கிற நிரலகம் KPluginFactory-ஐ வழங்கவில்லை."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1நி%2.%3வி"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1நி%2வி"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1ம%2நி"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1ம%2நி%3.%4வி"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1m%2நி%3வி"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 நாட்கள்"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 மணிநேரம்"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 நிமிடங்கள்"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 நொடிகள்"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n மில்லிநொடி"
+msgstr[1] "%n மில்லிநொடிகள்"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n நாள்"
+msgstr[1] "%n நாட்கள்"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n மணிநேரம்"
+msgstr[1] "%n மணிநேரம்"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n நிமிடம்"
+msgstr[1] "%n நிமிடங்கள்"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n நொடி"
+msgstr[1] "%n நொடிகள்"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 மற்றும் %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "முறையற்ற தேதி"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "இரண்டு நாட்களில்"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "நாளை"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "இன்று"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "நேற்று"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "இரண்டு நாட்களுக்கு முன்"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "இப்போது"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 நிமிடங்களுக்கு முன்"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 என்று எந்த பாதையும் இல்லை."
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "'lsof'-ஐ இயக்க முடியவில்லை. பிழை குறியீடு %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob-க்கு விண்டோஸில் ஆதரவு இல்லை"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Kishore G <kishore96@gmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-04-08 20:02+0530\n"
+"Last-Translator: Kishore G <kishore96@gmail.com>\n"
+"Language-Team: Tamil <kde-i18n-doc@kde.org>\n"
+"Language: ta\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 20.12.3\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD ஒலிக்கோப்பை"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "கே.டீ.யீ. நிறத் திட்டம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff தொகுப்பு"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "பிளாஸ்மாய்ட்"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "இணைய காப்பகம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR படம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "கே.டீ.யீ. பதப்படுத்தப்படாத பட படிவங்கள்"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc பாடல் குறிப்பு கோப்பு"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "எழுத்துரு தொகுப்பு"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "விண்டோஸ் சேவையகம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "விண்டோஸ் பணிக்குழு"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "கே.டீ.யீ. கணினி மேற்பார்வை"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "கே.டீ.யீ. திட்டமுறை"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander கோப்பு"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "உருளைக்கிழங்கு"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf சேமிக்கப்பட்ட ஆட்டம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "ஆக்குலர் ஆவணக் காப்பகம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri படம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo படம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo படம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig படம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg ஆவணம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot கோப்பு"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "விண்டோஸ் இணைப்பு"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet பதிவிறக்க பட்டியல்"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ தொடர்பு"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "மைக்ரோசாப்ட் ஊடகப் படிவம்"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash அறிக்கை"
--- /dev/null
+# translation of kdelibs4.po to Telugu
+#
+#
+# Purushottam Boyanapalli <boyanapalli@gmail.com>, 2005.
+# విజయ్ కిరణ్ కముజు <infyquest@gmail.com>, 2007.
+# pavithran <pavithran.s@gmail.com>, 2007.
+# Krishna Babu K <kkrothap@redhat.com>, 2008, 2009.
+# sreekalyanbapatla <sreekalyan3@gmail.com>, 2013.
+# GVS.Giri <gvs.giri@swecha.net>, 2013.
+# Bhuvan Krishna <bhuvan@swecha.org>,2013.
+# Naveen Kandimalla <naveen@swecha.net>,2013.
+# B Poojitha <bondalakuntapoojitha99@gmail.com>, 2019.
+# Sripath Roy Koganti <sripathroy@swecha.net>, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2019-03-06 12:12+0530\n"
+"Last-Translator: Sripath Roy Koganti <sripathroy@swecha.net>\n"
+"Language-Team: Telugu <reachus@swecha.net>\n"
+"Language: te\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Gtranslator 3.30.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ఈ ప్రోగ్రామ్కు లైసెన్స్ షరతులు పేర్కొనలేవు.\n"
+"దయచేసి లైసెన్స్ షరతుల కొరకు పత్రరచన లేక మూలంను \n"
+"సంప్రదించండి.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "ఈ ప్రోగ్రామ్ %1 షరతుల క్రింద పంచిపెట్టడమైనది."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "జి పి ఎల్ వి 2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "జి యాన్ యూ జనరల్ పబ్లిక్ లైసెన్స్ వెర్షన్ 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "యల్ జి పి యల్ వి 2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "గ్ను లెస్సర్ జనరల్ పబ్లిక్ లైసెన్స్ వెర్షన్ 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD లైసెన్స్"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD లైసెన్స్"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "ఆర్టిస్టిక్ లైసెన్స్"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "ఆర్టిస్టిక్ లైసెన్స్"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "క్కు పి యల్ వి 1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "క్యు పబ్లిక్ లైసెన్స్"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "జి పి యల్ వి3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "గ్ను సాధారణ పబ్లిక్ లైసెన్స్ వివరణం 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "యల్ జి పి యల్ వి3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "గ్ను తక్కువ సాధారణ పబ్లిక్ లైసెన్స్ వివరణం 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "యల్ జి పి యల్ వి2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "జి యాన్ యూ లెస్సర్ జనరల్ పబ్లిక్ లైసెన్స్ వెర్షన్ 2"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "నిర్దేశితమైన"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "ఏమి ఇవ్వబడలేదు"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"కెడిఈ తెలుగు అనువాదం జట్టు సమాచారం కొరకు ఈ వెబ్ సైట్ ను చూడండి<a href=\"http://www.swecha."
+"org\">స్వేచ్ఛ</a>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "మూలకర్త సమాచారం చూపుము"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "లైసెన్స్ సమాచరం చూపుము"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "ఈ అనువర్తనం కోసం డెస్క్టాప్ ఎంట్రీ యొక్క మూల ఫైల్ పేరు."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "ఫైల్ పేరు"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "ఈ కార్యక్రమాన్ని వ్రాసినవారు అజ్ఞాతంగా వుండదలచుకున్నారు"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "KAboutData CLI|"
+#| msgid "%1 was written by:"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ను వ్రాసింది\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "తప్పులను తెలియచేయుటకు http://bugs.kde.orgని వాడండి."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "%1 కు తప్పులను తెలియచేయండి."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 లైబ్రరిలో కెడిఈ 4 కి సరిపడె ఫేక్టరి లేదు"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "వై "
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "జడ్"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "పూర్వాహ్నము"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "యఫ్ "
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "మధ్యాహ్నము"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "యాన్ "
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "మ్యు "
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "పూర్వాహ్నము"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "కే "
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "ఖా"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "ఎం"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "ఎం ఐ "
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "జి "
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "జి "
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "టి "
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "టి "
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "పి "
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "ఫై "
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "ఈ "
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "ఈ ఐ "
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "జడ్"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "జి "
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "వై "
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "యి "
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "బిట్"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "బి "
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "యమ "
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "హెచ్ జడ్"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 బి "
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 కె బి "
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 యంబి"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 జిబి "
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 టిబి "
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 పిబి "
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ఇబి "
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 జడ్ బి "
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 వై బి "
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 బి "
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 కెబి "
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 యంబి"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 జిబి "
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 టిబి "
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 పిబి "
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ఇబి "
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 జడ్ బి "
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 వై బి "
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 బి "
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 కె బి "
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 యం బి "
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 జిబి "
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 టిబి "
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 పిబి "
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ఇఐబి"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 జ్ఐ బి "
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 వై బి "
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr " %1నిమిషల %2.%3సెకండ్లు"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1నిమిషల %2సెకండ్లు"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1గంట %2నిమిషాలు "
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1గంట%2నిమిషల%3.%4సెకండ్లు "
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1గంట%2నిమిషల %3సెకండ్లు "
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 రోజులు"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 గంటలు"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 నిమిషాలు"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 సెకన్లు"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n మిల్లీసెకండ్"
+msgstr[1] "%n మిల్లీసెకండ్లు"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n రోజు"
+msgstr[1] "%n రోజులు"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n గంట"
+msgstr[1] "%n గంటలు"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n నిమిష"
+msgstr[1] "%n నిమిషాలు"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n సెకను"
+msgstr[1] "%n సెకన్లు"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 మరియు %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "చెల్లని తేదీ"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n రోజు"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "రేపు"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "ఈరొజు"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "నిన్న"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 నిమిషాలు"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1,%2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 దస్త్రం లేదు"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Tajik Language
+# Copyright (C) 2004, 2002, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# 2004, 2005, 2006, 2007 infoDev, a World Bank organization.
+# 2004, 2005, 2006, 2007 Khujand Computer Technologies, Inc.
+# 2004, 2005, 2006, 2007 Youth Opportunities, NGO, 2005.
+# Roger Kovacs <rkovacs@khujand.org>, 2003.
+# Thomas Diehl <thd@kde.org>, 2003.
+# Victor Ibragimov <victor.ibragimov@gmail.com>, 2003, 2004, 2005, 2006, 2007, 2008, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2019-09-12 19:55+0500\n"
+"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
+"Language-Team: English <kde-i18n-doc@kde.org>\n"
+"Language: tg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 19.04.3\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Барои истифодабарии ин барнома, ягон шартномаи иҷозатномавӣ муайн карда "
+"нашудааст.\n"
+"Барои гирифтани маълумоти муфассал оид ба шарту шароити иҷозатномавӣ, "
+"ҳуҷҷатҳои барномаро\n"
+"истифода баред.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ин барнома дар асоси шарту шароитҳои %1 паҳн карда шудааст."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Иҷозатномаи ҷамъиятии умумии GNU, Нашри 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Иҷозатномаи ҷамъиятии умумии мухтасаршудаи GNU, Нашри 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Иҷозатномаи BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Иҷозатномаи BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Иҷозатномаи бадеӣ"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Иҷозатномаи бадеӣ"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Иҷозатномаи ҷамъиятии Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Иҷозатномаи ҷамъиятии умумии GNU, Нашри 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Иҷозатномаи ҷамъиятии умумии мухтасаршудаи GNU, Нашри 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Иҷозатномаи ҷамъиятии умумии мухтасаршудаи GNU, Нашри 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Фармоишӣ"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Муайян нашудааст"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Ташаккур гуфта ба ҳамаи гурӯҳҳои тарҷумонҳо аз тамоми дунё, KDE ба бисёр "
+"забонҳо тарҷума карда шуд.</p><p>Барои гирифтани маълумоти муфассал оид ба "
+"тарҷумаҳои байналмилалии низоми KDE ба <a href=\"https://l10n.kde.org"
+"\">https://l10n.kde.org</a> гузаред</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Намоиш додани маълумоти муаллиф"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Намоиш додани маълумоти иҷозатнома."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Номи файли аслии воридшуда ба мизи корӣ барои ин барнома."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "номи файл"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Ин барнома аз тарафи шахсе навишта шудааст, ки намехоҳад номи худро ошкор "
+"намояд."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 аз ҷониби барномасози зерин навишта шудааст:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Барои фиристодани гузориш дар бораи хато, лутфан, аз сомонаи https://bugs."
+"kde.org истифода баред."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Лутфан, гузоришро дар бораи хато ба %1 фиристонед."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Китобхонаи %1 низоми KPluginFactory-ро пешниҳод намекунад."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "бит"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Ҳтс"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 кБ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЕБ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 БЮ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 КБ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЕБ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЮБ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КиБ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МиБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГиБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ТиБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ПиБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ЕиБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ЗиБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ЮиБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 рӯз"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 соат"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 дақиқа"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 сония"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n миллисония"
+msgstr[1] "%n миллисония"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n рӯз"
+msgstr[1] "%n рӯз"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n соат"
+msgstr[1] "%n соат"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n дақиқа"
+msgstr[1] "%n дақиқа"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n сония"
+msgstr[1] "%n сония"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ва %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Санаи нодуруст"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "KFormat|"
+#| msgid "%n day(s)"
+#| msgid_plural "%n day(s)"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%n рӯз"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Фардо"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Имрӯз"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Дирӯз"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 дақиқа"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Масири %1 вуҷуд надорад"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Иҷрокунии \"lsof\" қатъ шуд, рамзи хато %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob дар Windows дастгирӣ карда намешавад"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Victor Ibragimov <victor.ibragimov@gmail.com>, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2019-08-17 19:20+0500\n"
+"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
+"Language-Team: English <kde-i18n-doc@kde.org>\n"
+"Language: tg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 19.04.3\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD-и аудио"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "Ҳуруфи нақши нуқтаии SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Зербарномаи Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "Созгори васеъшавии KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "Нақшаи рангҳои KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "Бастаи KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "Ҳамёни KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Қолиби гузориши Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "Мавзӯи SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Ҳуҷҷати идоракунии лоиҳаи Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Ҳуҷҷати бастаи кории Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "Ҳуҷҷати идоракунии лоиҳаи KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "Бастаи кории идоракунии лоиҳаи KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Бойгонии Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "Бойгонии шабакавӣ"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "Нақшаи W3C XML"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "Файли васлкунаки RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "Воридоти KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "Тасвири HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "Қолибҳои тасвири кopкаpднашyдаи KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Файли маводи низоми шонздаҳии Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Рӯйхати васлкунаки боркунандаи рӯйхати файли Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "Файли низоми ҳисобкунии мусиқии abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "Бастаҳои ҳуруфӣ"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Хизматрасони Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Гурӯҳи кории Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "Назорати низоми KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "Мавзӯи KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Лоиҳаи Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Файли Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "Картошка"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Бозии захирашудаи Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Дарси Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Бойгонии ҳуҷҷати Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Андоми Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Андоми Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "Андоми KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Андоми Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "Ҳуҷҷати KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "Ҳуҷҷати даcтypдиҳанда луғавӣ"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "Файли KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "Луғати KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Барориши профили Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Файли тарҳсози Umbrello UML"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Пайванди Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "Рӯйхати боргириҳои KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Бойгонии шаклакҳои Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "Тамоси ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Қолиби расонаи Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Ҳуҷҷати Turtle RDF"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Тасвири Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Файли забони Qt Markup"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+#, fuzzy
+#| msgid "KConfigXT Configuration Options"
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "Имконоти танзимоти KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+#, fuzzy
+#| msgid "KConfigXT Code Generation Options"
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "Имконоти эҷодкунии рамзи KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+#, fuzzy
+#| msgid "KXMLGUI UI Declaration"
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "Баённомаи KXMLGUI UI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+#, fuzzy
+#| msgid "KNotification Declaration"
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Баённомаи KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Thai
+# Copyright (C) 2003,2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# Thanomsub Noppaburana <donga_n@yahoo.com>, 2003,2004, 2005.
+# Thanomsub Noppaburana <donga.nb@gmail.com>, 2005, 2008, 2010.
+# Sahachart Anukulkitch <drrider@gmail.com>, 2006, 2007.
+# Narachai Sakorn <narachai@gmail.com>, 2008.
+# Phuwanat Sakornsakolpat <narachai@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2010-12-31 22:47+0700\n"
+"Last-Translator: Phuwanat Sakornsakolpat <narachai@gmail.com>\n"
+"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
+"Language: th\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"ไม่พบสัญญาอนุญาตของโปรแกรมนี้\n"
+"โปรดตรวจสอบเอกสารหรือต้นฉบับโปรแกรม\n"
+"เกี่ยวกับสัญญาอนุญาตในการใช้งาน\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "โปรแกรมนี้แจกจ่ายและเผยแพร่ภายใต้เงื่อนไข %1"
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "แบบ GPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "สัญญาอนุญาตแบบ GNU - GPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "แบบ LGPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "สัญญาอนุญาตแบบ GNU - LGPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "สัญญาอนุญาตแบบ BSD"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "สัญญาอนุญาตแบบ BSD"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "สัญญาอนุญาตแบบ Artistic"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "สัญญาอนุญาตแบบ Artistic"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "แบบ QPL รุ่น 1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "สัญญาอนุญาตสาธารณะแบบ Q"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "แบบ GPL รุ่น 3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "สัญญาอนุญาตแบบ GNU - GPL รุ่น 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "แบบ LGPL รุ่น 3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "สัญญาอนุญาตแบบ GNU - LGPL รุ่น 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "แบบ LGPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "สัญญาอนุญาตแบบ GNU - LGPL รุ่น 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "กำหนดเอง"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "ยังไม่ระบุ"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>ขอขอบคุณสำหรับการทำงานของทีมแปลภาษาทั่วโลก ในการแปล KDE เป็นภาษาต่าง ๆ มากมาย</"
+"p> <p>สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการทำให้ KDE เป็นภาษาชาติต่าง ๆ สามารถดูได้ที่เว็บไซต์ "
+"<a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "แสดงข้อมูลของผู้เขียน"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "แสดงข้อมูลสัญญาอนุญาต"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "โปรแกรมนี้เขียนขึ้นโดยผู้ไม่ประสงค์จะออกนาม"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 ถูกเขียนขึ้นโดย\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "โปรดไปยังเว็บไซต์ http://bugs.kde.org เพื่อรายงานข้อผิดพลาด\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "โปรดรายงานข้อผิดพลาดไปยัง %1\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "ไลบรารี %1 ไม่ได้ให้ส่วนที่เข้ากันได้กับแฟคทอรีของ KDE 4 มาด้วย"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "พฤ."
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "พ.ค."
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "แก้ไข"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "ส่งข้อมูล"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ไบต์"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 กิโลไบต์"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 เมกะไบต์"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 กิกะไบต์"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 เทระไบต์"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 เพตะไบต์"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 เอกซะไบต์"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 เซตะไบต์"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ยอตตะไบต์"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ไบต์"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 กิโลไบต์"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 เมกะไบต์"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 กิกะไบต์"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 เทระไบต์"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 เพตะไบต์"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 เอกซะไบต์"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 เซตะไบต์"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ยอตตะไบต์"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 ไบต์"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 กิโลไบต์"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 เมกะไบต์"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 กิกะไบต์"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 เทระไบต์"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 เพตะไบต์"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 เอกซะไบต์"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 เซตะไบต์"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ยอตตะไบต์"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 วัน"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 ชั่วโมง"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 นาที"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 วินาที"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 มิลลิวินาที"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 วัน"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 ชั่วโมง"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 นาที"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 วินาที"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "รายการใช้งานไม่ได้"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 วัน"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "วันนี้"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "เมื่อวานนี้"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 นาที"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "ยังไม่มีแฟ้ม %1 อยู่"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Thanomsub Noppaburana <donga.nb@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2010-03-25 11:33+0700\n"
+"Last-Translator: Thanomsub Noppaburana <donga.nb@gmail.com>\n"
+"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
+"Language: th\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 1.0\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "แผ่นซีดีเสียง"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "แบบอักษรบิตแมปรูปแบบ SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "จาวาแอพเพล็ต"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "ชุดสีของ KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "แพกเกจ KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "กระเป๋าของ 'กระเป๋าคุมข้อมูล-K'"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "แม่แบบรายงานของ Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "พลาสมอยด์"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "ชุดตกแต่งของ SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "แฟ้มจัดเก็บของหน้าเว็บ"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "แฟ้มจัดเก็บของหน้าเว็บ"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "แฟ้มส่วนเสริม RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "ภาพรูปแบบ HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "ภาพรูปแบบข้อมูลดิบของ KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "แฟ้มออบเจ็กต์ฐานสิบหกของ Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "แพกเกจชุดแบบอักษร"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "เครื่องแม่ข่ายวินโดวส์"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "กลุ่มงานของวินโดวส์"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "เครื่องมือติดตามการทำงานของระบบของ KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "ชุดตกแต่ง KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "เอกสารโครงงาน Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "ข้อมูลที่บันทึกไว้ของเกม Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "คอร์สของเกม Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "แฟ้มจัดเก็บเอกสารของ Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "RDF/XML document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "เอกสาร RDF/XML"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "all files"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "แฟ้มทั้งหมด"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "แฟ้มลิงค์ของวินโดวส์"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "รายการดาวน์โหลดของ 'ช่วยดาวน์โหลด-K (KGet)'"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ที่อยู่ติดต่อของ ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "RDF/XML document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "เอกสาร RDF/XML"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "ภาพรูปแบบ Softimage PIC"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Turkish
+# translation of kdelibs4.po to
+# Kdelibs Turkish translation file
+# Copyright (C) 2000,2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#
+# Ömer Fadıl USTA <omer_fad@hotmail.com>,1999-2002.
+# Görkem Çetin <gorkem@kde.org>, 2002,2003, 2004.
+# Tuncay YENİAY <tuncayyeniay@mynet.com>,2002.
+# Ayşe Genç <ayse@uludag.org.tr>, 2005.
+# Görkem Çetin <gorkem@kde.org.tr>, 2005.
+# Görkem Çetin <gorkem@gorkemcetin.com>, 2005.
+# Bekir SONAT <cortexbs@yahoo.com>, 2005.
+# Serdar Soytetir <tulliana@gmail.com>, 2007.
+# Serdar Soytetir <tulliana@gmail.com>, 2007, 2008, 2009, 2011.
+# H. İbrahim Güngör <ibrahim@pardus.org.tr>, 2010, 2011.
+# Ozan Çağlayan <ozan@pardus.org.tr>, 2010, 2011.
+# Serdar SOYTETİR <tulliana@gmail.com>, 2010, 2012.
+# Volkan Gezer <volkangezer@gmail.com>, 2013, 2014, 2015, 2017, 2021.
+# Kaan Ozdincer <kaanozdincer@gmail.com>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2021-01-16 14:15+0100\n"
+"Last-Translator: Volkan Gezer <volkangezer@gmail.com>\n"
+"Language-Team: Turkish <kde-l10n-tr@kde.org>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 20.08.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Bu program için bir lisans koşulu verilmemiş.\n"
+"Lütfen lisans bilgisi için belgelendirmeyi veya kaynak kodu\n"
+"kontrol edin.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Bu program %1 lisansı altında dağıtılmaktadır."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU Genel Kamu Lisansı Sürüm 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Kısıtlı Genel Kamu Lisansı Sürüm 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD Lisansı"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD Lisansı"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Sanatsal Lisans"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Sanatsal Lisans"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Kamu Lisansı"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU Genel Kamu Lisansı Sürüm 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Kısıtlı Genel Kamu Lisansı Sürüm 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Kısıtlı Genel Kamu Lisansı Sürüm 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Özel"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Belirtilmemiş"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE birçok dile çevrilmiştir, dünyanın dört bir yanındaki çeviri "
+"ekiplerine çalışmaları için teşekkür ederiz.</p><p>KDE "
+"uluslararasılaştırılması hakkında daha fazla bilgi almak için <a href="
+"\"http://l10n.kde.org\">http://l10n.kde.org</a> adresini ziyaret edin.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Yazar bilgisini göster."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Lisans bilgisini göster."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Bu uygulama için masaüstü girdisinin temel dosya adı."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "dosya ismi"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Bu uygulama isminin gizli kalmasını isteyen birisi tarafından yazıldı."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 programının yazarı:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Lütfen hataları bildirmek için http://bugs.kde.org adresini kullanın."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Lütfen hataları %1 adresine bildirin."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 kitaplığı bir KPluginFactory sunmuyor."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1s%2d%3sn"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 gün"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 saat"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 dakika"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 saniye"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n milisaniye"
+msgstr[1] "%n milisaniye"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n gün"
+msgstr[1] "%n gün"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n saat"
+msgstr[1] "%n saat"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n dakika"
+msgstr[1] "%n dakika"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n saniye"
+msgstr[1] "%n saniye"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ve %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Geçersiz tarih"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "İki gün içinde"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Yarın"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Bugün"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Dün"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "İki gün önce"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Şimdi"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 dakika önce"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 yolu yok"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "%1 \"lsof 'hata kodu yürütülemedi"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob, Windows'ta desteklenmez"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Serdar Soytetir <tulliana@gmail.com>, 2009, 2011, 2012.
+# H. İbrahim Güngör <ibrahim@pardus.org.tr>, 2011.
+# Volkan Gezer <volkangezer@gmail.com>, 2014, 2021.
+# Kaan Ozdincer <kaanozdincer@gmail.com>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-01-16 14:20+0100\n"
+"Last-Translator: Volkan Gezer <volkangezer@gmail.com>\n"
+"Language-Team: Turkish <kde-l10n-tr@kde.org>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 20.08.2\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD sesi"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF bit eşlem yazı tipi"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java programcığı"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML Uzatma Adaptörü"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE renk şeması"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff paketi"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet cüzdanı"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar rapor şablonu"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba teması"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan proje yönetimi belgesi"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan iş paketi belgesi"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato proje yönetimi belgesi"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato proje yönetimi çalışma paketi"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar arşivi"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "web arşivi"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML şeması"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio eklenti dosyası"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum içeri aktarımı"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR resmi"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE ham resim biçimleri"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® onaltılık nesne dosyası"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate dosya listesi yükleyici eklentisi listesi"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc müzik notalama dosyası"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "yazı tipi paketi"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows sunucusu"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows çalışma grubu"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE sistem izleyici"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE teması"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta projesi"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander dosyası"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "patates"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf kaydedilmiş oyunu"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf etabı"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular belge arşivi"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri çizimi"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo çizimi"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo çizimi"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig çizimi"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg belgesi"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "sözcük hazinesi çalışma belgesi"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot dosyası"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz sözcük hazinesi"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind profil dökümü"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML Modelleyici dosyası"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows bağlantısı"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet indirme listesi"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete duygu simgeleri arşivi"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ kişisi"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Medya Biçimi"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF belgesi"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC resmi"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt İşaretleme Dili dosyası"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT Yapılandırma Seçenekleri"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT Kod Oluşturma Seçenekleri"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI UI Bildirimi"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification Beyanı"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash Raporu"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Ainur Shakirov <ainur.shakirov.tt@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2011-11-26 15:12+0400\n"
+"Last-Translator: Ainur Shakirov <ainur.shakirov.tt@gmail.com>\n"
+"Language-Team: Tatar <>\n"
+"Language: tt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.2\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Бу кушымтада лицензия күрсәтелмәгән.\n"
+"Бәлки, ул кушымтаның документациясендә яки чыганаклы текстларында "
+"күрсәтелгәндер.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Кушымта %1 шартларында таратыла."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU General Public License, 2-нче юрамасы"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU Lesser General Public License, 2-нче юрамасы"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD лицензиясе"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD лицензиясе"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic License"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q Public License"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU General Public License, 3-нче юрамасы"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU Lesser General Public License, 3-нче юрамасы"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU Lesser General Public License, 2-нче юрамасы"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Өстәмә"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Лицензия күрсәтелмәгән"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE исемле график чолганышы төрле илләрдә яшәүче тәрҗемәчеләр төркемнәре "
+"ярдәмендә күп телләргә тәрҗемә ителгән.</p><p>KDE проектының тәрҗемә итү "
+"турында күбрәк мәгълумат алу өчен <a href=\"http://l10n.kde.org\">l10n.kde."
+"org</a> сәхифәсенә мөрәҗәгать итегез.</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Автор турында мәгълүматны күрсәтү"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Лицензия турында мәгълүматны күрсәтү"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Кушымтаның авторы билгесез булып калырга теләде."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 яздылар:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Хаталар турында хәбәрләр өчен http://bugs.kde.org белән кулланыгыз.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Хаталар турында хәбәрләр өчен %1 белән кулланыгыз.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 китапханәсе KDE4 чолганышына туры килүче компонентларын ясый алмый."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "ТК"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Почта"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тай"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "С"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "С"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Үзгәртү"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Бәяләмә өчен тапшыру"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 кБ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЭБ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 КБ"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЭБ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КиБ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МиБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГиБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ТиБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ПиБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ЭиБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ЗиБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ЙиБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 көн"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 сәгать"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 минут"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунд"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 миллисекунд"
+msgstr[1] "%1 миллисекунд"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 көн"
+msgstr[1] "%1 көн"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 сәгать"
+msgstr[1] "%1 сәгать"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 минут"
+msgstr[1] "%1 минут"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 секунд"
+msgstr[1] "%1 секунд"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Тотылмаган элемент."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 көн"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Иртәгә"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Бүген"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Кичә"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 минут"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 файлы юк"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Uyghur translation for kdelibs4.
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Sahran <sahran.ug@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2013-09-08 07:05+0900\n"
+"Last-Translator: Gheyret Kenji <gheyret@gmail.com>\n"
+"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
+"Language: ug\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 1.5.5\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"بۇ پروگراممىغا ئىجازەت كېلىشىمى بەلگىلەنمىگەن.\n"
+"پۈتۈك ياكى ئەسلى ھۆججەتنى تەكشۈرۈپ ئىجازەت كېلىشىمى بار يوقلۇقىنى تەكشۈرۈڭ.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "بۇ پروگرامما %1 ئىجازەت كېلىشىمى ئاساسىدا تارقىتىلىدۇ."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمى 2- نەشرى"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU كەڭرىرەك ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمى 2- نەشرى"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD ئىجازەتنامە"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD ئىجازەتنامە"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic ئىجازەتنامە"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic ئىجازەتنامە"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q ئاممىۋى ئىجازەتنامە (QPL)"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمى 3- نەشرى"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU كەڭرىرەك ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمى 3- نەشرى"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU كەڭرىرەك ئادەتتىكى ئاممىۋى ئىجازەت كېلىشىمى 2- نەشرى"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "ئىختىيارى"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "بەلگىلەنمىگەن"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>دۇنيانىڭ ھەر قايسى جايلىرىدىكى تەرجىمە گۇرۇپپىلىرىنىڭ جاپالىق ئەمگىكىگە "
+"كۆپ رەھمەت، KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"http://l10n.kde.org\">http://l10n.kde."
+"org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "يازغۇچى ئۇچۇرىنى كۆرسەت"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "ئىجازەت ئۇچۇرىنى كۆرسەت"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr ""
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "بۇ پروگرامما ئاتىنى ئاشكارىلاشنى خالىمىغان كىشى تەرىپىدىن يېزىلغان."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 نى يازغانلار\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "كەمتۈكلەرنى http://bugs.kde.org غا مەلۇم قىلىڭ.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "كەمتۈكلەرنى %1 غا مەلۇم قىلىڭ.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 ئامبار KDE 4 بىلەن ماسلىشىدىغان زاۋۇت تەمىنلىمىگەن."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "چ ب"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "چ ك"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "چ ب"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "چ ب"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "@action"
+#| msgid "Mail"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "خەت"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "@item Text character set"
+#| msgid "Thai"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "تايلاندچە"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "تەھرىرلەش"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "تاپشۇر"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "چ ب"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 كىلوبايت"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 مېگابايت"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 گ ب"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 تېرابايت"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 پېتابايت"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ئېكسابايت"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 كب"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 مېگابايت"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 گ ب"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 تېرابايت"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 پېتابايت"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ئېكسابايت"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 بايت"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 كىلوبايت"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 مېگابايت"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 گىگابايت"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 تېرابايت"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 پېتابايت"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ئېكسابايت"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 زېتتابايت"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 يوتتابايت"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 كۈن"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 سائەت"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 مىنۇت"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 سېكۇنت"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 مىللىسېكۇنت"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 كۈن"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 سائەت"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 مىنۇت"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 سېكۇنت"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 ۋە %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "ئىناۋەتسىز تۈر."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 كۈن"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "ئەتە"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "بۈگۈن"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "تۈنۈگۈن"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 مىنۇت"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1، %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 ھۆججەت مەۋجۇت ئەمەس"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Uyghur translation for xml_mimetypes.
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+# Sahran <sahran.ug@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2013-09-08 07:05+0900\n"
+"Last-Translator: Gheyret Kenji <gheyret@gmail.com>\n"
+"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
+"Language: ug\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "ئۈن CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF بىت سۈرەت خەت نۇسخىسى"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java قوللانچاق"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML كېڭەيتىلمە ماسلاشتۇرغۇچ"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE رەڭ لايىھىسى"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff بوغچا"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet ھەميانى"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar دوكلات قېلىپى"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba ئۆرنىكى"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan قۇرۇلۇش باشقۇرۇش پۈتۈكى"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan خىزمەت بوغچا پۈتۈكى"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato قۇرۇلۇش باشقۇرۇش پۈتۈكى"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato قۇرۇلۇش باشقۇرۇش خىزمەت بوغچىسى"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar ئارخىپى"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "تور بەت ئارخىپى"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML لايىھە"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio قىستۇرما ھۆججەت"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum ئەكىر"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR سۈرەت"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE raw سۈرەت پىچىمى"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® ئون ئالتىلىك نەڭ ھۆججىتى"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate ھۆججەت تىزىمى يۈكلىگۈچ قىستۇرما تىزىمى"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc مۇزىكا بەلگە ھۆججىتى"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "خەت نۇسخا بوغچىسى"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows مۇلازىمېتىر"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows خىزمەت گۇرۇپپىسى"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE سىستېما كۆزەتكۈچ"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE ئۆرنىكى"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta قۇرۇلۇشى"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander ھۆججەت"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "ياڭيۇ"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf ساقلىغان ئويۇن"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf دەرسلىكى"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular پۈتۈك ئارخىپى"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri شەكىللەر"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo شەكىللىرى"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo شەكىللەر"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig شەكىللەر"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg پۈتۈك"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "سۆزلۈك مەشىق پۈتۈكى"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot ھۆججەت"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz سۆزلۈكلەر"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind يېشىش سەپلىمە ھۆججىتى"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML مودېل قۇرۇش ھۆججىتى"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows ئۇلانما"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet چۈشۈرۈش تىزىمى"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete چىراي ئىپادە ئارخىپى"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ ئالاقەداش"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "مىكروسوفت ۋاسىتە پىچىمى"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF پۈتۈك"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC سۈرەت"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt بەلگە تىل ھۆججىتى"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr ""
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr ""
--- /dev/null
+# Translation of kcoreaddons5_qt.po to Ukrainian
+# Copyright (C) 2018-2020 This_file_is_part_of_KDE
+# This file is distributed under the license LGPL version 2.1 or
+# version 3 or later versions approved by the membership of KDE e.V.
+#
+# Eugene Onischenko <oneugene@ukr.net>, 2002, 2003, 2004, 2005, 2006.
+# Andriy Rysin <arysin@bcsii.com>, 2002, 2003, 2006, 2007.
+# Ivan Petrouchtchak <fr.ivan@ukrainian-orthodox.org>, 2005, 2006, 2007, 2008.
+# Yuri Chornoivan <yurchor@ukr.net>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: kcoreaddons5_qt\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-11-17 08:43+0200\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Qt-Contexts: true\n"
+"X-Generator: Lokalize 20.11.70\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Умови ліцензування для цієї програми не було вказано.\n"
+"Будь ласка, ознайомтеся з документацією або початковим кодом, щоб дізнатися\n"
+"про умови ліцензування.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ця програма розповсюджується за умовами %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Загальна громадська ліцензія GNU версії 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Скорочена загальна громадська ліцензія GNU версії 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Ліцензія BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Ліцензія BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Артистична ліцензія"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Артистична ліцензія"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Громадська ліцензія Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Загальна громадська ліцензія GNU версії 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Скорочена загальна громадська ліцензія GNU версії 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Скорочена загальна громадська ліцензія GNU версії 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Нетипові"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Не вказано"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE перекладено українською мовою групою перекладачів вільного "
+"програмного забезпечення. Щоб дізнатися більше, завітайте на <a href="
+"\"http://www.linux.org.ua/\">наш сайт</a>. Коментарі щодо перекладу "
+"надсилайте на <a href=\"mailto:yurchor@ukr.net\">цю адресу</a> або до списку "
+"листування <a href=\"mailto:kde-i18n-uk@kde.org\">kde-i18n-uk@kde.org</a> "
+"(для надсилання повідомлень до списків листування слід спочатку на них "
+"підписатися).</p><p>З короткою довідкою щодо участі у перекладі KDE "
+"українською можна ознайомитися на <a href=\"http://docs.linux.org.ua/"
+"Переклади/Короткий_довідник_перекладача_KDE/\">цій сторінці</a>.</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Показати інформацію щодо авторів."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Показати інформацію щодо ліцензування."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Базова назва файла для стільничного запису цієї програми."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "назва файла"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Автор цієї програми не виявив бажання оприлюднювати своє ім’я."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 було створено"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Будь ласка, користуйтесь https://bugs.kde.org для повідомлень про помилки."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Про вади, будь ласка, повідомляйте на адресу %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "У бібліотеці %1 не передбачено інтерфейсу KPluginFactory."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "й"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "з"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "а"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "ф"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "п"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "н"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "мк"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "м"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "к"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Кі"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "М"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Мі"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "Г"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Гі"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "Т"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ті"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "П"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Пі"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "Е"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Еі"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "З"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Зі"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Й"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Йі"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "біт"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "Б"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "м"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Гц"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 кБ"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЕБ"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 Кбайт"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 МБ"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 ГБ"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 ТБ"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 ПБ"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 ЕБ"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ЗБ"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 ЙБ"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 КіБ"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 МіБ"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 ГіБ"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 ТіБ"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 ПіБ"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 ЕіБ"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ЗіБ"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 ЙіБ"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1хв%2,%3с"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1хв%2с"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1г%2хв"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1г%2хв%3,%4с"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1г%2хв%3с"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 днів"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 годин"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 хвилин"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 секунд"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n мілісекунда"
+msgstr[1] "%n мілісекунди"
+msgstr[2] "%n мілісекунд"
+msgstr[3] "%n мілісекунда"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n день"
+msgstr[1] "%n дні"
+msgstr[2] "%n днів"
+msgstr[3] "%n день"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n година"
+msgstr[1] "%n години"
+msgstr[2] "%n годин"
+msgstr[3] "%n година"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n хвилина"
+msgstr[1] "%n хвилини"
+msgstr[2] "%n хвилин"
+msgstr[3] "%n хвилина"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n секунда"
+msgstr[1] "%n секунди"
+msgstr[2] "%n секунд"
+msgstr[3] "%n секунда"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Некоректна дата"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "За два дні"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Завтра"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Сьогодні"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Вчора"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Два дні тому"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Просто зараз"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 хвилин тому"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Шляху %1 не існує"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Не вдалося виконати «lsof». Код помилки %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "У Windows не передбачено підтримки KListOpenFilesJob"
--- /dev/null
+# Translation of kde5_xml_mimetypes.po to Ukrainian
+# Copyright (C) 2020 This_file_is_part_of_KDE
+# This file is distributed under the license LGPL version 2.1 or
+# version 3 or later versions approved by the membership of KDE e.V.
+#
+# Yuri Chornoivan <yurchor@ukr.net>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: kde5_xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-10-26 10:18+0200\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Lokalize 20.11.70\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "звуковий компакт-диск"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "растровий файл SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "аплет Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "адаптер розширень KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "схема кольорів KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "пакунок KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "торбинка KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "шаблон звіту Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "плазмоїд"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "тема SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "документ керування роботами Plan зі складу Calligra"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "пакунок роботи Plan зі складу Calligra"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "документ керування роботами KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "пакунок проєкту керування роботами KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "архів Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "вебархів"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "схема XML W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "файл додатка RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "файли імпортування KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "зображення HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "формати цифрових негативів KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "шістнадцятковий об'єктний файл Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "список файлів Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "файл нотного стану abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "пакунок шрифтів"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "сервер Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "робоча група Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "монітор системи KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "тема KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "проєкт Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "файл Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "картопля"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "збережена гра Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "майданчик Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "архів документа Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "рисунок Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "рисунок Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "рисунок KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "рисунок Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "документ KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "документ вправ зі словником"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "файл KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "словник KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "дамп профілювання Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "файл програми для моделювання UML Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "посилання Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "список отримань KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "архів емоційок Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "контакт ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft Media Format"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "документ RDF Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "зображення PIC Softimage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "файл мови розмітки Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "параметри налаштування KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "параметри створення коду KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "оголошення інтерфейсу KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "оголошення KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "звіт KCrash"
--- /dev/null
+# translation of kdelibs4.po to Uzbek
+# Mashrab Kuvatov <kmashrab@uni-bremen.de>, 2003, 2004, 2005, 2006, 2008.
+# translation of kdelibs4.po to
+# Copyright (C) 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2008-05-30 17:29+0200\n"
+"Last-Translator: Mashrab Kuvatov <kmashrab@uni-bremen.de>\n"
+"Language-Team: Uzbek <floss-uz-l10n@googlegroups.com>\n"
+"Language: uz\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Bu dastur uchun hech qanday litsenziya shartlari koʻrsatilmagan.\n"
+"Iltimos litsenziya shartlarini dastur uchun qoʻllanmada yoki\n"
+"dasturning kodida qarab chiqing.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Bu dastur %1 shartlari asosida tarqatilgan."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Litsenziya:"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Litsenziya:"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Ommaviy kalit"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Ommaviy kalit"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Ommaviy kalit"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "&Tanlash"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Hech qanday provayder tanlanmagan."
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Turli davlatlardagi tarjima jamoalarini harakati tufayli KDE koʻp "
+"tillarga tarjima qilingan.</p><p>Agar KDE'ni turli tillarga tarjimasi haqida "
+"koʻproq maʼlumotga ega boʻlishni istasangiz, <a href=\"http://l10n.kde.org"
+"\">http://l10n.kde.org/</a> veb-saytiga qarang.</p><p>KDE va umuman Linuksni "
+"oʻzbekchalashtirish haqida koʻproq maʼlumotga ega boʻlishni istasangiz, <a "
+"href=\"http://www.uni-bremen.de/~kmashrab/to-uzbek-linux.html\">\"Linuks "
+"oʻzbekcha gapiradi\"</a> loyihasining veb-saytiga qarang.</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Muallif haqida maʼlumotni koʻrsatish"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Litsenziya haqida maʼlumotni koʻrsatish"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Vetnamcha"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr ""
+"Ushbu dastur ismini oshkor qilishni istamagan kishi tomonidan yozilgan."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1\n"
+"%2\n"
+"tomonidan yozilgan."
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Iltimos, xato haqida xabar berish uchun http://bugs.kde.org veb-saytidan "
+"foydalaning.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Iltimos, xato haqida quyidagiga xabar bering. %1\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 kutubxonasida %2 funksiyasi mavjud emas."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "ertalab"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "kechqurun"
+
+#: lib/util/kformatprivate.cpp:105
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Yoqilgan"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "ertalab"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Ok"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Pay"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Oʻzgartirish"
+
+#: lib/util/kformatprivate.cpp:111
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Tahrirlash"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Joʻnatish"
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "ertalab"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "Bugun"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 daqiqa"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 soniya"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 soniya"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "Bugun"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 daqiqa"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 soniya"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "xato bayroqlar"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Bugun"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Bugun"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Kecha"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 daqiqa"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Uslub %1 topilmadi.\n"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Uzbek
+# translation of kdelibs4.po to
+# Copyright (C) 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc.
+# Mashrab Kuvatov <kmashrab@uni-bremen.de>, 2003, 2004, 2005, 2006, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2009-10-17 00:34+0200\n"
+"Last-Translator: Mashrab Kuvatov <kmashrab@uni-bremen.de>\n"
+"Language-Team: Uzbek <floss-uz-l10n@googlegroups.com>\n"
+"Language: uz@cyrillic\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Бу дастур учун ҳеч қандай лицензия шартлари кўрсатилмаган.\n"
+"Илтимос лицензия шартларини дастур учун қўлланмада ёки\n"
+"дастурнинг кодида қараб чиқинг.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Бу дастур %1 шартлари асосида тарқатилган."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Лицензия:"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Лицензия:"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Оммавий калит"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Оммавий калит"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Оммавий калит"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "&Танлаш"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Ҳеч қандай провайдер танланмаган."
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>Турли давлатлардаги таржима жамоаларини ҳаракати туфайли KDE кўп тилларга "
+"таржима қилинган.</p><p>Агар KDE'ни турли тилларга таржимаси ҳақида кўпроқ "
+"маълумотга эга бўлишни истасангиз, <a href=\"http://l10n.kde.org\">http://"
+"l10n.kde.org/</a> веб-сайтига қаранг.</p><p>KDE ва умуман Линуксни "
+"ўзбекчалаштириш ҳақида кўпроқ маълумотга эга бўлишни истасангиз, <a href="
+"\"http://www.uni-bremen.de/~kmashrab/to-uzbek-linux.html\">\"Линукс ўзбекча "
+"гапиради\"</a> лойиҳасининг веб-сайтига қаранг.</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Муаллиф ҳақида маълумотни кўрсатиш"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Лицензия ҳақида маълумотни кўрсатиш"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Ветнамча"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ушбу дастур исмини ошкор қилишни истамаган киши томонидан ёзилган."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1\n"
+"%2\n"
+"томонидан ёзилган."
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Илтимос, хато ҳақида хабар бериш учун http://bugs.kde.org веб-сайтидан "
+"фойдаланинг.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Илтимос, хато ҳақида қуйидагига хабар беринг. %1\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "%1 кутубхонасида %2 функцияси мавжуд эмас."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "эрталаб"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "кечқурун"
+
+#: lib/util/kformatprivate.cpp:105
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Ёқилган"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "эрталаб"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Ок"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Пай"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Ўзгартириш"
+
+#: lib/util/kformatprivate.cpp:111
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Тир"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Таҳрирлаш"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Йи"
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Йи"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Жўнатиш"
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "эрталаб"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 Кб"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Мб"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Гб"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Тб"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Мб"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Гб"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 Тб"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 Б"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 кун"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 соат"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 дақиқа"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 сония"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 миллисония"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 кун"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 соат"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 дақиқа"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 сония"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "хато байроқлар"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 кун"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Бугун"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Кеча"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 дақиқа"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 файли мавжуд эмас"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# Vietnamese translation for kdelibs.
+# Copyright © 2007 KDE i18n Project for Vietnamese.
+#
+# Clytie Siddall <clytie@riverland.net.au>, 2006-2007.
+# Hoàng Đức Hiếu <hieu.d.hoang@gmail.com>, 2008, 2011.
+# Lê Hoàng Phương <herophuong93@gmail.com>, 2011, 2012.
+# Phu Hung Nguyen <phuhnguyen@disroot.org>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2020-11-19 21:20+0100\n"
+"Last-Translator: Phu Hung Nguyen <phuhnguyen@disroot.org>\n"
+"Language-Team: Vietnamese <kde-l10n-vi@kde.org>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 20.08.1\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Chưa có điều khoản cấp phép nào được chỉ định cho chương trình này.\n"
+"Vui lòng tìm các điều khoản cấp phép trong tài liệu hướng dẫn hoặc\n"
+"mã nguồn.\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Chương trình này được phân phối theo các điều khoản của %1."
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Giấy phép Công cộng Tổng quát GNU Phiên bản 2"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Giấy phép Công cộng Tổng quát Hạn chế GNU Phiên bản 2"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Giấy phép BSD"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Giấy phép BSD"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Giấy phép Nghệ thuật"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Giấy phép Nghệ thuật"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Giấy phép Công cộng Q"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Giấy phép Công cộng Tổng quát GNU Phiên bản 3"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Giấy phép Công cộng Tổng quát Hạn chế GNU Phiên bản 3"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Giấy phép Công cộng Tổng quát Hạn chế GNU Phiên bản 2.1"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Tự chọn"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Chưa chỉ định"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE đã được dịch sang nhiều ngôn ngữ nhờ có công lao của các đội dịch "
+"trên toàn thế giới.</p><p>Để biết thêm thông tin về công việc quốc tế hoá "
+"KDE, hãy xem <a href=\"https://l10n.kde.org\">https://l10n.kde.org</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Hiện thông tin tác giả."
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Hiện thông tin giấy phép."
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "Tên tệp cơ sở của mục desktop dành cho ứng dụng này."
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "tên tệp"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ứng dụng này được viết bởi một người muốn ẩn danh."
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 được viết bởi:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "Vui lòng dùng https://bugs.kde.org để báo lỗi."
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "Vui lòng báo lỗi đến %1."
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Thư viện %1 không cung cấp KPluginFactory nào."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1 p %2,%3 gy"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1 p %2 gy"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1 g %2 p"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1 g %2 p %3,%4 gy"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1 g %2 p %3 gy"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2,%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3,%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 ngày"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 tiếng"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 phút"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 giây"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n mi-li giây"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n ngày"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n tiếng"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n phút"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n giây"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Ngày không hợp lệ"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Ngày kia"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Ngày mai"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Hôm nay"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Hôm qua"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "Hôm kia"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "Vừa xong"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 phút trước"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Đường dẫn %1 không tồn tại"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "Thực thi `lsof' thất bại, mã lỗi %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob không được hỗ trợ trên Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Phu Hung Nguyen <phuhnguyen@disroot.org>, 2020, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-08-03 10:07+0200\n"
+"Last-Translator: Phu Hung Nguyen <phuhnguyen@disroot.org>\n"
+"Language-Team: Vietnamese <kde-l10n-vi@kde.org>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 20.12.2\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "âm thanh CD"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "phông chữ kiểu bản đồ bit SNF"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "tiểu ứng dụng Java"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "bộ tiếp hợp mở rộng KHTML"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "quy hoạch màu KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "gói KNewStuff"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "ví KWallet"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "mẫu báo cáo Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "plasmoid"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "chủ đề SuperKaramba"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "tài liệu quản lí dự án Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "tài liệu gói công việc Calligra Plan"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "tài liệu quản lí dự án KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "gói công việc quản lí dự án KPlato"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "kho trữ Kugar"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "kho trữ web"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "sơ đồ XML W3C"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "tệp phần cài cắm RealAudio"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "phần nhập khẩu KPhotoAlbum"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "ảnh HDR"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "các dạng thức ảnh thô ở KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "tệp đối tượng thập lục phân Intel®"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "danh sách của phần cài cắm \"Bộ tải danh sách tệp\" trong Kate"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "tệp kí hiệu âm nhạc abc"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "gói phông chữ"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "máy chủ Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "nhóm làm việc Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "trình giám sát hệ thống KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "chủ đề KDE"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "dự án Quanta"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "tệp Kommander"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "potato"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "bàn chơi Kolf đã lưu"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "sân Kolf"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "kho trữ tài liệu Okular"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "hình Cabri"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "hình Dr. Geo"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "hình KGeo"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "hình Kig"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "tài liệu KSeg"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "tài liệu huấn luyện viên từ vựng"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "tệp KmPlot"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "từ vựng KWordQuiz"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "phần xổ tiểu sử Cachegrind/Callgrind"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "tệp Trình tạo mô hình UML Umbrello"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "liên kết Windows"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "danh sách tải về KGet"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "kho trữ hình biểu cảm Kopete"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "liên hệ ICQ"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Dạng thức phương tiện Microsoft"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "tài liệu RDF Turtle"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "ảnh PIC Softimage"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "tệp Ngôn ngữ Đánh dấu Qt"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "các lựa chọn cấu hình KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "các lựa chọn tạo mã KConfigXT"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "khai báo UI KXMLGUI"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "khai báo KNotification"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "báo cáo KCrash"
--- /dev/null
+# translation of kdelibs4.po to Walloon
+# Ratournaedje e walon des messaedjes di KDE.
+#
+# Lorint Hendschel <lorint.hendschel@skynet.be>, 2002.
+# Pablo Saratxaga <pablo@walon.org>, 2002-2004, 2007.
+# Jean Cayron <jean.cayron@gmail.com>, 2007, 2008, 2009, 2010, 2011.
+# Jean Cayron <jean.cayron@tele2allin.be>, 2007.
+# Jean Cayron <jean.cayron@base.be>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2012-07-04 17:33+0200\n"
+"Last-Translator: Jean Cayron <jean.cayron@base.be>\n"
+"Language-Team: Walloon <linux-wa@walon.org>\n"
+"Language: wa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Poedit-Language: Walloon\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"I n' a nole licince k' a stî dnêye po ç' programe ci.\n"
+"Alez vey el documintåcion ou dvins les fitchîs sourdants po vey\n"
+"s' i gn a des racsegnmints sol licince.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Ci programe est csemé dizo l´ licince %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL m2"
+
+#: lib/kaboutdata.cpp:317
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "Licince publike djeneråle GNU (GPL) modêye 2"
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL m2"
+
+#: lib/kaboutdata.cpp:321
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "Schate licince publike djeneråle GNU (GPL) modêye 2"
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Licince BSD"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "BSD License"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Licince BSD"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Licince årtistike"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Artistic License"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Licince årtistike"
+
+#: lib/kaboutdata.cpp:332
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "QPL v1.0"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL m1.0"
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Q Public License"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Licince publike Q"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "GPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL m3"
+
+#: lib/kaboutdata.cpp:337
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "Licince publike djeneråle GNU (GPL) modêye 3"
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v3"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL m3"
+
+#: lib/kaboutdata.cpp:341
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 3"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "Schate licince publike djeneråle GNU (GPL) modêye 3"
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgctxt "@item license (short name)"
+#| msgid "LGPL v2"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL m2"
+
+#: lib/kaboutdata.cpp:345
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "GNU Lesser General Public License Version 2"
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "Schate licince publike djeneråle GNU (GPL) modêye 2"
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Custom"
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "Licince prôpe"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+#| msgctxt "@item license"
+#| msgid "Not specified"
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Nén specifieye"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+#| msgctxt "replace this with information about your translation team"
+#| msgid ""
+#| "<p>KDE is translated into many languages thanks to the work of the "
+#| "translation teams all over the world.</p><p>For more information on KDE "
+#| "internationalization visit <a href=\"http://l10n.kde.org\">http://l10n."
+#| "kde.org</a></p>"
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE a stî ratourné dins tot plin di lingaedjes gråces a l' ovraedje des "
+"ekipes di ratournaedje tot avå l' Daegne.</p><p>Li ratournaedje e walon a "
+"stî fwait tot shuvant les rîles del novele ortografeye do walon, li «rfondou "
+"walon».</p><p>Po pus d' infôrmåcions so l' eternåcionålijhaedje di KDE, "
+"vizitez <a href=\"http://l10n.kde.org\">http://l10n.kde.org</a></p><p>Po pus "
+"d' infôrmåcions sol rifondou walon, vizitez <a href=\"http://rifondou.walon."
+"org\">http://rifondou.walon.org/</a></p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Mostere l' infôrmåcion so l' oteur"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Mostere l' infôrmåcion sol licince"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Filename Error"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Åk ni va nén avou l' no do fitchî"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "Ci programe ci a stî scrît pa ene sakî ki vout dmorer anonime."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 a stî scrît pa\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "S' i vs plait, eployîz http://bugs.kde.org po rapoirter les bugs.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "S' i vs plait, eployîz %1 po rapoirter les bugs.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer a KDE 4 compatible factory."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "Li livreye %1 n' ofere nén ene fabrike ki rote avou KDE 4."
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "'l est bon"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgctxt "Coptic month 4 - ShortName"
+#| msgid "Kia"
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Before Noon KLocale::ShortName"
+#| msgid "AM"
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "AM"
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+#| msgctxt "Ethiopian month 8 - ShortName"
+#| msgid "Miy"
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "May"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+#| msgctxt "Tir short"
+#| msgid "Tir"
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+#, fuzzy
+#| msgctxt "After Noon KLocale::NarrowName"
+#| msgid "P"
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Candjî"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Evoyî"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+#| msgctxt "size in 1000 bytes"
+#| msgid "%1 kB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 ko"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Po"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Eo"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zo"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yo"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+#| msgctxt "memory size in 1024 bytes"
+#| msgid "%1 KB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 Ko"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+#| msgctxt "size in 10^6 bytes"
+#| msgid "%1 MB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 Mo"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+#| msgctxt "size in 10^9 bytes"
+#| msgid "%1 GB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 Go"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+#| msgctxt "size in 10^12 bytes"
+#| msgid "%1 TB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 To"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+#| msgctxt "size in 10^15 bytes"
+#| msgid "%1 PB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 Po"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+#| msgctxt "size in 10^18 bytes"
+#| msgid "%1 EB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 Eo"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+#| msgctxt "size in 10^21 bytes"
+#| msgid "%1 ZB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 Zo"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+#| msgctxt "size in 10^24 bytes"
+#| msgid "%1 YB"
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 Yo"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+#| msgctxt "size in bytes"
+#| msgid "%1 B"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 o"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+#| msgctxt "size in 1024 bytes"
+#| msgid "%1 KiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 Kio"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+#| msgctxt "size in 2^20 bytes"
+#| msgid "%1 MiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 Mio"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+#| msgctxt "size in 2^30 bytes"
+#| msgid "%1 GiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 Gio"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+#| msgctxt "size in 2^40 bytes"
+#| msgid "%1 TiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 Tio"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+#| msgctxt "size in 2^50 bytes"
+#| msgid "%1 PiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 Pio"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+#| msgctxt "size in 2^60 bytes"
+#| msgid "%1 EiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 Eio"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+#| msgctxt "size in 2^70 bytes"
+#| msgid "%1 ZiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 Zio"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+#| msgctxt "size in 2^80 bytes"
+#| msgid "%1 YiB"
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 Yio"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 djoûs"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 eures"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 munutes"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 segondes"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+#| msgctxt "@item:intext"
+#| msgid "%1 millisecond"
+#| msgid_plural "%1 milliseconds"
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 milisegonde"
+msgstr[1] "%1 milisegonde"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%1 djoûs"
+msgstr[1] "%1 djoûs"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 hours"
+#| msgid "%1 hours"
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%1 eures"
+msgstr[1] "%1 eures"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 munutes"
+msgstr[1] "%1 munutes"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 seconds"
+#| msgid "%1 seconds"
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 segondes"
+msgstr[1] "%1 segondes"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt ""
+#| "@item:intext days and hours. This uses the previous item:intext messages. "
+#| "If this does not fit the grammar of your language please contact the i18n "
+#| "team to solve the problem"
+#| msgid "%1 and %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 eyet %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+#| msgid "Invalid item."
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Mwais cayet."
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 days"
+#| msgid "%1 days"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "%1 djoûs"
+
+#: lib/util/kformatprivate.cpp:490
+#, fuzzy
+#| msgctxt "@option tomorrow"
+#| msgid "Tomorrow"
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "Dimwin"
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Today"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Ouy"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Yesterday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Ayir"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "@item:intext %1 is a real number, e.g. 1.23 minutes"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 munutes"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "City, Country"
+#| msgid "%1, %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+#| msgid "File %1 does not exist"
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Fitchî %1 n' egzistêye nén"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to
+# translation of kdelibs4.po to
+# translation of kdelibs4.po to
+# translation of kdelibs4.po to Xhosa
+# K Desktop Environment - kdelibs
+# Copyright (C) 2001 translate.org.za
+# Antoinette Dekeni <antoinette@transalate.org.za>, 2001.
+# Lwandle Mgidlana <lwandle@translate.org.za>, 2002
+# Thelma Lungcuzo <thelma@translate.org.za>, 2002
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2002-12-13 17:20SAST\n"
+"Last-Translator: Lwandle Mgidlana <lwandle@translate.org.za>\n"
+"Language-Team: Xhosa <xhosa@translate.org.za>\n"
+"Language: xh\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0beta2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"Akukho zinto ezikhankanyiweyo ezingenalayisenisi koludweliso lwenkqubo\n"
+"Nceda khangela uxwebhu okanye imvelaphi yazo\n"
+"naziphi na izinto ezinelayisenisi.\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "Oludweliso lwenkqubo lunikezelwe phantsi kweemeko ze %1."
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "PGP"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "PGP"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "Umsinga wesandi Phezulu"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "Umsinga wesandi Phezulu"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Isitshixo Sikawonke wonke"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Isitshixo Sikawonke wonke"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Isitshixo Sikawonke wonke"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "PGP"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "PGP"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "PGP"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "I&siko"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "Akukho thuba likhethiweyo"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE iguqulelwe esixhoseni liqela le translate.org.za:<br> u-Antoinette "
+"Dekeni, Dwayne Bailey,Lwandle Mgidlana, Thelma Lungcuzo </p><p>KDE "
+"iguqulelwe kwiilwimi ezininzi. Enkosi kumsebenzi wamaqela oguqulelo lolwimi "
+"kwihlabathi lonke.</p><p> Xa ufuna ulwazi oluphangaleleyo nge KDE "
+"ngokujikelele ndwendwela i-http://i18n.kde.org</p>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "Bonisa ulwazi lombhali"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "Bonisa ulwazi lwelayisenisi"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "Igama Elinikiweyo"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "%1 yabhalwa ngumntu ofuna ukuhlala engaziwa."
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 yabhalwa ngu\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr ""
+"Nceda sebenzisa i http://bugs.kde.org ukuchaza amagciwane, ungabhaleli "
+"ababhali nkqo.\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr ""
+"Nceda sebenzisa i http://bugs.kde.org ukuchaza amagciwane, ungabhaleli "
+"ababhali nkqo.\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "Qala"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Guqula kancinane"
+
+#: lib/util/kformatprivate.cpp:111
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G:"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "ka Mat"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Hlela"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "Ngenisa"
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B:"
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2, %3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "Mvulo"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 iinketho"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 iinketho"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 iinketho"
+msgstr[1] "%1 iinketho"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "Mvulo"
+msgstr[1] "Mvulo"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 iinketho"
+msgstr[1] "%1 iinketho"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 iinketho"
+msgstr[1] "%1 iinketho"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "Igama lefayile elingasebenziyo (ama)"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "Mvulo"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "Mvulo"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "Lwesibini"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 iinketho"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "Uhlobo lwe %1 alufumanekanga\n"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Chinese Simplified
+# Copyright (C) 2007 Free Software Foundation, Inc.
+#
+# Lie Ex <lilith.ex@gmail.com> 2007-2011.
+# Wang Jian <lark@linux.ustc.edu.cn>, 1998.
+# Sarah Smith <sarahs@redhat.com>, 2002.
+# Xiong Jiang <jxiong@offtopic.org>, 2002,2003,2004.
+# Funda Wang <fundawang@linux.net.cn>, 2002,2003,2004.
+# Liang Qi <cavendish.qi@gmail.com>, 2007.
+# Feng Chao <chaofeng111@gmail.com>, 2010, 2012, 2014.
+# Ni Hui <shuizhuyuanluo@126.com>, 2010, 2011, 2012.
+# Weng Xuetian <wengxt@gmail.com>, 2011, 2012, 2013, 2015, 2016, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdeorg\n"
+"PO-Revision-Date: 2021-07-26 13:47\n"
+"Language-Team: Chinese Simplified\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Qt-Contexts: true\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Crowdin-Project: kdeorg\n"
+"X-Crowdin-Project-ID: 269464\n"
+"X-Crowdin-Language: zh-CN\n"
+"X-Crowdin-File: /kf5-trunk/messages/kcoreaddons/kcoreaddons5_qt.pot\n"
+"X-Crowdin-File-ID: 5549\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"此程序并未指定许可证。\n"
+"请检查它的文档或者源文件\n"
+"是否标注了许可证条款。\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "本程序在 %1 的条款下进行分发。"
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU 通用公共许可证 第 2 版"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU 宽通用公共许可证 第 2 版"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD 许可证"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD 许可证"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "Artistic 许可证"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "Artistic 授权"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q 公共许可证"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU 通用公共许可证 第 3 版"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU 宽通用公共许可证 第 3 版"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU 宽通用公共许可证 第 2.1 版"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "自定义"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "未指定"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>KDE 软件由全世界各种语言的翻译团队以及志愿者进行翻译。</p><p>要了解 KDE 国"
+"际化工作的详情,请访问 <a href=\"https://l10n.kde.org\">http://l10n.kde.org</"
+"a>。</p>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "显示开发人员信息。"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "显示许可证信息。"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "此应用程序的基准 desktop 文件名"
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "文件名"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "此应用程序由某位隐姓埋名的有志之士编写。"
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 软件由以下人员编写:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "如需报告程序缺陷,请访问 https://bugs.kde.org 网站。"
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "请将程序缺陷报告给 %1。"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "程序库 %1 并未提供 KPluginFactory。"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 天"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 小时"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 分"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 秒"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n 毫秒"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n 天"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n 小时"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n 分"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n 秒"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "无效的日期"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "两天内"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "明天"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "今天"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "昨天"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "两天前"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr "刚刚"
+
+#: lib/util/kformatprivate.cpp:515
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 分钟前"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1,%2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "路径 %1 不存在"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "执行 lsof 失败,错误代码 %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob 不支持 Windows"
--- /dev/null
+# translation of xml_mimetypes.po to 简体中文
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Ni Hui <shuizhuyuanluo@126.com>, 2009, 2011.
+# Lie Ex <lilith.ex@gmail.com>, 2009-2010.
+# Feng Chao <chaofeng111@qq.com>, 2014, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdeorg\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2021-07-26 13:47\n"
+"Last-Translator: \n"
+"Language-Team: Chinese Simplified\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Crowdin-Project: kdeorg\n"
+"X-Crowdin-Project-ID: 269464\n"
+"X-Crowdin-Language: zh-CN\n"
+"X-Crowdin-File: /kf5-trunk/messages/kcoreaddons/kde5_xml_mimetypes.pot\n"
+"X-Crowdin-File-ID: 24404\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD 音频"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF 点阵字体"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java 小程序"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML 扩展适配器"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE 配色方案"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff 软件包"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet 钱包"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar 报表模板"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "Plasma 小部件"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba 主题"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan 项目管理文档"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan 工作包文档"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato 项目管理文档"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato 项目管理工作包"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar 存档文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+msgctxt "comment"
+msgid "web archive"
+msgstr "网页存档文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML 结构定义"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio 插件文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum 导入文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR 图像"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE RAW 图像格式"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® 十六进制对象文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate 文件列表加载器插件列表"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc 乐谱文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+msgctxt "comment"
+msgid "fonts package"
+msgstr "字体包"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows 服务器"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows 工作组"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE 系统监视器"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE 主题"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta 工程"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander 文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+msgctxt "comment"
+msgid "potato"
+msgstr "potato 文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf 游戏存档"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf 场地"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular 文档存档"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri 图形"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo 图形"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo 图形"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig 图形"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg 文档"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "词汇训练文档"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot 文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz 词汇表"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind 配置转储文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML 建模文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows 链接"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet 下载列表"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete 表情存档"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ 联系人"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "Microsoft 媒体格式"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF 文档"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC 图像"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt 标记语言文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT 配置选项"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT 代码生成选项"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI 界面声明"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "Knotification 声明"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash 报告"
--- /dev/null
+# translation of kdelibs4.po to Chinese (Hong Kong)
+# Chinese (traditional) translation for kdeutils
+# Copyright (C) 2001, 02, 04, 05 Free Software Foundation, Inc.
+#
+# Eric Cheng <ericc@shinewave.com.tw>, unknown.
+#
+# with reference from zh_CN translation (as of 2002-11-08):
+# Chih-Wei Huang <cwhuang@linux.org.tw>, 2001.
+# Kenduest Lee <kenduest@i18n.linux.org.tw>, 2001.
+# Jouston Huang (Huang, Jiun-Jeng) <jouston@housediy.com>, 2002.
+# Kenduest Lee <kenduest@i18n.linux.org.tw>, 2002.
+# Wang Jian <lark@linux.net.cn>, 2002.
+# Anthony Fok <anthony@thizlinux.com>, 2002.
+# Yuan-Chen Cheng <ycheng@slat.org>, 2002.
+# Wang Jian <lark@linux.ustc.edu.cn>, 1998.
+# Funda Wang <fundawang@en2china.com>, 2002.
+# Sarah Smith <sarahs@redhat.com>, 2002.
+# Xiong Jiang <jxiong@offtopic.org>, 2002.
+# Chia-Lin, Kao <acelan@linux.org.tw>, 2004.
+# Stanley Wong <stanley18fan0k@yahoo.com.hk>, 2005.
+# Abel Cheung <abel@oaka.org>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2006-01-04 13:32+0800\n"
+"Last-Translator: Abel Cheung <abel@oaka.org>\n"
+"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
+"Language: zh_HK\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+#, fuzzy
+#| msgid ""
+#| "No licensing terms for this program have been specified.\n"
+#| "Please check the documentation or the source for any\n"
+#| "licensing terms.\n"
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"這個程式沒有指定授權條款。\n"
+"請檢查文件或原始碼來檢查是否有授權條款。\n"
+
+#: lib/kaboutdata.cpp:272
+#, fuzzy, qt-format
+#| msgid "This program is distributed under the terms of the %1."
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "這個程式以 %1 的條款散佈。"
+
+#: lib/kaboutdata.cpp:316
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:320
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr ""
+
+#: lib/kaboutdata.cpp:324
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "許可證:"
+
+#: lib/kaboutdata.cpp:325
+#, fuzzy
+#| msgid "License:"
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "許可證:"
+
+#: lib/kaboutdata.cpp:328
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "公開密鑰"
+
+#: lib/kaboutdata.cpp:329
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "公開密鑰"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr ""
+
+#: lib/kaboutdata.cpp:333
+#, fuzzy
+#| msgid "Public Key"
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "公開密鑰"
+
+#: lib/kaboutdata.cpp:336
+#, fuzzy
+#| msgid "GPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:340
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr ""
+
+#: lib/kaboutdata.cpp:344
+#, fuzzy
+#| msgid "LGPL"
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr ""
+
+#: lib/kaboutdata.cpp:349
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "自訂(&U)"
+
+#: lib/kaboutdata.cpp:352
+#, fuzzy
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "沒有選擇供應者。"
+
+#: lib/kaboutdata.cpp:956
+#, fuzzy
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>關於 KDE 的中文化</p><p>如果想協助 KDE 的香港中文翻譯工作或者匯報問題,請"
+"到<a href=\"http://linuxhall.org/cgi-bin/mailman/listinfo/community\">香港中"
+"文翻譯郵件論壇</a>登記,然後就可以送電郵到 <a href=\"mailto:"
+"community@linuxhall.org\">community@linuxhall.org</a> 參與討論。</p><p>KDE 能"
+"夠翻譯成各國語言,要特別感謝來自各地的翻譯小組的工作。如果對於 KDE 國際化有興"
+"趣,請參考 <a href=\"http://i18n.kde.org/\">http://i18n.kde.org/</a>。</"
+"p><blockquote><p>KDE 的香港翻譯目前是由<a href=\"mailto:community@linuxhall."
+"org\"><b>香港翻譯隊伍</b></a>所主理,並得到以往和現在各志願人士義務協助。特別"
+"嗚謝以往繁體中文的翻譯者 (如 Joe Man, T.H. Tsieh, C.W. Huang, Anthony Fok "
+"等) 和管理者 (包括 shyue, kenduest lee, seventeen, jouston, acelan 等人),沒"
+"有他們以往的辛勞工作,就沒有現在的繁體中文翻譯。</p></blockquote>"
+
+#: lib/kaboutdata.cpp:1214
+#, fuzzy
+#| msgid "Show author information"
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "顯示作者資訊"
+
+#: lib/kaboutdata.cpp:1215
+#, fuzzy
+#| msgid "Show license information"
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "顯示版權資訊"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr ""
+
+#: lib/kaboutdata.cpp:1218
+#, fuzzy
+#| msgid "Vietnamese"
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "越南文"
+
+#: lib/kaboutdata.cpp:1228
+#, fuzzy
+#| msgid ""
+#| "This application was written by somebody who wants to remain anonymous."
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "這個應用程式是由某個不願透露姓名的人編寫。"
+
+#: lib/kaboutdata.cpp:1230
+#, fuzzy, qt-format
+#| msgctxt "the 2nd argument is a list of name+address, one on each line"
+#| msgid ""
+#| "%1 was written by\n"
+#| "%2"
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr ""
+"%1 的作者是:\n"
+"%2"
+
+#: lib/kaboutdata.cpp:1241
+#, fuzzy
+#| msgid "Please use http://bugs.kde.org to report bugs.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "請使用 http://bugs.kde.org 報告問題。\n"
+
+#: lib/kaboutdata.cpp:1243
+#, fuzzy, qt-format
+#| msgid "Please report bugs to %1.\n"
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "請回報問題到 %1。\n"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, fuzzy, qt-format
+#| msgid "The library %1 does not offer an %2 function."
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "函數庫 %1 不提供 %2 這個功能。"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:102
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:104
+#, fuzzy
+#| msgid "pm"
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "pm"
+
+#: lib/util/kformatprivate.cpp:105
+#, fuzzy
+#| msgid "On"
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "開"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:107
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+#| msgid "Ok"
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "Ok"
+
+#: lib/util/kformatprivate.cpp:109
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Kha"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:110
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "修改"
+
+#: lib/util/kformatprivate.cpp:111
+#, fuzzy
+#| msgid "G:"
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "綠:"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:112
+#, fuzzy
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Tir"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:114
+#, fuzzy
+#| msgid "Edit"
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "編輯"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "彝文"
+
+#: lib/util/kformatprivate.cpp:116
+#, fuzzy
+#| msgctxt "QFont"
+#| msgid "Yi"
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "彝文"
+
+#: lib/util/kformatprivate.cpp:125
+#, fuzzy
+#| msgid "Submit"
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "提交"
+
+#: lib/util/kformatprivate.cpp:128
+#, fuzzy
+#| msgid "B:"
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "藍:"
+
+#: lib/util/kformatprivate.cpp:131
+#, fuzzy
+#| msgid "am"
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "am"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr ""
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, fuzzy, qt-format
+#| msgid "%1 %2, %3"
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2,%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, fuzzy, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 %2"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, fuzzy, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 %2"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, fuzzy, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 %2"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr ""
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr ""
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr ""
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr ""
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "星期一"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr ""
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 個選項"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 個選項"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%1 個選項"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, fuzzy, qt-format
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "星期一"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] ""
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%1 個選項"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%1 個選項"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 %2"
+
+#: lib/util/kformatprivate.cpp:478
+#, fuzzy
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "錯誤的旗號"
+
+#: lib/util/kformatprivate.cpp:488
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "星期一"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:492
+#, fuzzy
+#| msgid "Monday"
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "星期一"
+
+#: lib/util/kformatprivate.cpp:494
+#, fuzzy
+#| msgid "Tuesday"
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "星期二"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 個選項"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, fuzzy, qt-format
+#| msgctxt "concatenation of dates and time"
+#| msgid "%1 %2"
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1 %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, fuzzy, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "沒有找到 %1 風格\n"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr ""
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr ""
--- /dev/null
+# translation of kdelibs4.po to Chinese Traditional
+# Copyright (C) 2001, 2002, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Eric Cheng <ericc@shinewave.com.tw>, unknown.
+# This file referenced zh_CN translations at 2002.
+# Chih-Wei Huang <cwhuang@linux.org.tw>, 2001.
+# Kenduest Lee <kenduest@i18n.linux.org.tw>, 2001, 2002.
+# Jouston Huang (Huang, Jiun-Jeng) <jouston@housediy.com>, 2002.
+# Chia-Lin, Kao <acelan@linux.org.tw>, 2004.
+# Yuan-Chen Cheng <ycheng@slat.org>, 2002.
+# Goodhorse <franklin@goodhorse.idv.tw>, 2008.
+# Frank Weng (a.k.a. Franklin) <franklin at goodhorse dot idv dot tw>, 2006-2009, 2010.
+# Franklin Weng <franklin@mail.everfocus.com.tw>, 2010, 2011, 2012.
+# Franklin Weng <franklin@goodhorse.idv.tw>, 2010, 2011, 2012, 2013, 2014, 2015, 2017.
+# Jeff Huang <s8321414@gmail.com>, 2016, 2017.
+# pan93412 <pan93412@gmail.com>, 2018, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdelibs4\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2014-03-23 01:50+0000\n"
+"PO-Revision-Date: 2019-12-22 21:11+0800\n"
+"Last-Translator: pan93412 <pan93412@gmail.com>\n"
+"Language-Team: Chinese <zh-l10n@lists.linux.org.tw>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 19.12.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Qt-Contexts: true\n"
+
+#: lib/kaboutdata.cpp:264
+msgctxt "KAboutLicense|"
+msgid ""
+"No licensing terms for this program have been specified.\n"
+"Please check the documentation or the source for any\n"
+"licensing terms.\n"
+msgstr ""
+"這個程式沒有指定授權條款。\n"
+"請檢查文件或原始碼來檢查是否有任何\n"
+"授權條款。\n"
+
+#: lib/kaboutdata.cpp:272
+#, qt-format
+msgctxt "KAboutLicense|"
+msgid "This program is distributed under the terms of the %1."
+msgstr "這個程式以 %1 的條款散佈。"
+
+#: lib/kaboutdata.cpp:316
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v2"
+msgstr "GPL v2"
+
+#: lib/kaboutdata.cpp:317
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 2"
+msgstr "GNU 通用公共授權第二版"
+
+#: lib/kaboutdata.cpp:320
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2"
+msgstr "LGPL v2"
+
+#: lib/kaboutdata.cpp:321
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2"
+msgstr "GNU LGPL 第二版"
+
+#: lib/kaboutdata.cpp:324
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "BSD License"
+msgstr "BSD 授權"
+
+#: lib/kaboutdata.cpp:325
+msgctxt "KAboutLicense|@item license"
+msgid "BSD License"
+msgstr "BSD 授權"
+
+#: lib/kaboutdata.cpp:328
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "Artistic License"
+msgstr "藝術授權"
+
+#: lib/kaboutdata.cpp:329
+msgctxt "KAboutLicense|@item license"
+msgid "Artistic License"
+msgstr "藝術授權"
+
+#: lib/kaboutdata.cpp:332
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "QPL v1.0"
+msgstr "QPL v1.0"
+
+#: lib/kaboutdata.cpp:333
+msgctxt "KAboutLicense|@item license"
+msgid "Q Public License"
+msgstr "Q 公開授權"
+
+#: lib/kaboutdata.cpp:336
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "GPL v3"
+msgstr "GPL v3"
+
+#: lib/kaboutdata.cpp:337
+msgctxt "KAboutLicense|@item license"
+msgid "GNU General Public License Version 3"
+msgstr "GNU 通用公共授權第三版"
+
+#: lib/kaboutdata.cpp:340
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v3"
+msgstr "LGPL v3"
+
+#: lib/kaboutdata.cpp:341
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 3"
+msgstr "GNU LGPL 第三版"
+
+#: lib/kaboutdata.cpp:344
+msgctxt "KAboutLicense|@item license (short name)"
+msgid "LGPL v2.1"
+msgstr "LGPL v2.1"
+
+#: lib/kaboutdata.cpp:345
+msgctxt "KAboutLicense|@item license"
+msgid "GNU Lesser General Public License Version 2.1"
+msgstr "GNU LGPL 第2.1版"
+
+#: lib/kaboutdata.cpp:349
+msgctxt "KAboutLicense|@item license"
+msgid "Custom"
+msgstr "自訂"
+
+#: lib/kaboutdata.cpp:352
+msgctxt "KAboutLicense|@item license"
+msgid "Not specified"
+msgstr "未指定"
+
+#: lib/kaboutdata.cpp:956
+msgctxt "KAboutData|replace this with information about your translation team"
+msgid ""
+"<p>KDE is translated into many languages thanks to the work of the "
+"translation teams all over the world.</p><p>For more information on KDE "
+"internationalization visit <a href=\"https://l10n.kde.org\">https://l10n.kde."
+"org</a></p>"
+msgstr ""
+"<p>關於 KDE 的中文化</p><blockquote><p>KDE 的正體中文翻譯目前由 <a href="
+"\"http://kde.linux.org.tw/\">KDE 正體中文翻譯團隊</a>維護。若有任何翻譯上的錯"
+"誤與問題,您可以經由下列管道回報:</p><p><ul><li>向<a href=\"mailto:"
+"franklin@kde.org\"> KDE 正體中文翻譯團隊協調人</a>回報。</li><li>到 <a href="
+"\"http://bugs.kde.org\">KDE 的錯誤回報系統</a>上回報(Product 請選擇 i18n,"
+"Component 請選擇 zh_TW)。</li></ul></p><p>KDE 的正體中文翻譯是由許多前輩的努"
+"力才有今日的成就。在此特別感謝過去由李爵樺、薛景中、陳更新、以及黃峻崢等人所"
+"領導的 zh-l10n 中文化計劃,以及來自世界各地的志願工作者所義務參與。過去為了 "
+"KDE 翻譯貢獻的譯者們還包括了Abel Cheung,Joe Man,T.H.Hsieh,Chih-Wei Huang,"
+"Chia-Lin Kao,Yuan-Chen Cheng 等人。因為實在很多,未列出的前輩們敬請見諒。</"
+"p><p>此外我們不要忘了 CLE GNU/Linux 中文計劃協助 Linux 的國際化及中文化基礎架"
+"構。</p><p>若是需要對於 KDE 國際化更進一步的資訊,請參考 <a href=\"http://"
+"l10n.kde.org/\">http://l10n.kde.org/</a></p></blockquote>"
+
+#: lib/kaboutdata.cpp:1214
+msgctxt "KAboutData CLI|"
+msgid "Show author information."
+msgstr "顯示作者資訊。"
+
+#: lib/kaboutdata.cpp:1215
+msgctxt "KAboutData CLI|"
+msgid "Show license information."
+msgstr "顯示版權資訊。"
+
+#: lib/kaboutdata.cpp:1217
+msgctxt "KAboutData CLI|"
+msgid "The base file name of the desktop entry for this application."
+msgstr "這個應用程式的桌面項目基礎檔案名稱。"
+
+#: lib/kaboutdata.cpp:1218
+msgctxt "KAboutData CLI|"
+msgid "file name"
+msgstr "檔案名稱"
+
+#: lib/kaboutdata.cpp:1228
+msgctxt "KAboutData CLI|"
+msgid "This application was written by somebody who wants to remain anonymous."
+msgstr "這個應用程式是由某個不願透露姓名的人編寫。"
+
+#: lib/kaboutdata.cpp:1230
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "%1 was written by:"
+msgstr "%1 的作者是:"
+
+#: lib/kaboutdata.cpp:1241
+msgctxt "KAboutData CLI|"
+msgid "Please use https://bugs.kde.org to report bugs."
+msgstr "請使用 http://bugs.kde.org 報告問題。"
+
+#: lib/kaboutdata.cpp:1243
+#, qt-format
+msgctxt "KAboutData CLI|"
+msgid "Please report bugs to %1."
+msgstr "請報告問題到 %1。"
+
+#: lib/plugin/kpluginloader.cpp:107
+#, qt-format
+msgctxt "KPluginLoader|"
+msgid "The library %1 does not offer a KPluginFactory."
+msgstr "函式庫 %1 不提供 KPluginFactory。"
+
+#: lib/util/kformatprivate.cpp:100
+msgctxt "KFormat|SI prefix for 10^⁻24"
+msgid "y"
+msgstr "y"
+
+#: lib/util/kformatprivate.cpp:101
+msgctxt "KFormat|SI prefix for 10^⁻21"
+msgid "z"
+msgstr "z"
+
+#: lib/util/kformatprivate.cpp:102
+msgctxt "KFormat|SI prefix for 10^⁻18"
+msgid "a"
+msgstr "a"
+
+#: lib/util/kformatprivate.cpp:103
+msgctxt "KFormat|SI prefix for 10^⁻15"
+msgid "f"
+msgstr "f"
+
+#: lib/util/kformatprivate.cpp:104
+msgctxt "KFormat|SI prefix for 10^⁻12"
+msgid "p"
+msgstr "p"
+
+#: lib/util/kformatprivate.cpp:105
+msgctxt "KFormat|SI prefix for 10^⁻9"
+msgid "n"
+msgstr "n"
+
+#: lib/util/kformatprivate.cpp:106
+msgctxt "KFormat|SI prefix for 10^⁻6"
+msgid "µ"
+msgstr "µ"
+
+#: lib/util/kformatprivate.cpp:107
+msgctxt "KFormat|SI prefix for 10^⁻3"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|SI prefix for 10^3"
+msgid "k"
+msgstr "k"
+
+#: lib/util/kformatprivate.cpp:109
+msgctxt "KFormat|IEC binary prefix for 2^10"
+msgid "Ki"
+msgstr "Ki"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|SI prefix for 10^6"
+msgid "M"
+msgstr "M"
+
+#: lib/util/kformatprivate.cpp:110
+msgctxt "KFormat|IEC binary prefix for 2^20"
+msgid "Mi"
+msgstr "Mi"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|SI prefix for 10^9"
+msgid "G"
+msgstr "G"
+
+#: lib/util/kformatprivate.cpp:111
+msgctxt "KFormat|IEC binary prefix for 2^30"
+msgid "Gi"
+msgstr "Gi"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|SI prefix for 10^12"
+msgid "T"
+msgstr "T"
+
+#: lib/util/kformatprivate.cpp:112
+msgctxt "KFormat|IEC binary prefix for 2^40"
+msgid "Ti"
+msgstr "Ti"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|SI prefix for 10^15"
+msgid "P"
+msgstr "P"
+
+#: lib/util/kformatprivate.cpp:113
+msgctxt "KFormat|IEC binary prefix for 2^50"
+msgid "Pi"
+msgstr "Pi"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|SI prefix for 10^18"
+msgid "E"
+msgstr "E"
+
+#: lib/util/kformatprivate.cpp:114
+msgctxt "KFormat|IEC binary prefix for 2^60"
+msgid "Ei"
+msgstr "Ei"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|SI prefix for 10^21"
+msgid "Z"
+msgstr "Z"
+
+#: lib/util/kformatprivate.cpp:115
+msgctxt "KFormat|IEC binary prefix for 2^70"
+msgid "Zi"
+msgstr "Zi"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|SI prefix for 10^24"
+msgid "Y"
+msgstr "Y"
+
+#: lib/util/kformatprivate.cpp:116
+msgctxt "KFormat|IEC binary prefix for 2^80"
+msgid "Yi"
+msgstr "Yi"
+
+#: lib/util/kformatprivate.cpp:125
+msgctxt "KFormat|Symbol of binary digit"
+msgid "bit"
+msgstr "bit"
+
+#: lib/util/kformatprivate.cpp:128
+msgctxt "KFormat|Symbol of byte"
+msgid "B"
+msgstr "B"
+
+#: lib/util/kformatprivate.cpp:131
+msgctxt "KFormat|Symbol of meter"
+msgid "m"
+msgstr "m"
+
+#: lib/util/kformatprivate.cpp:134
+msgctxt "KFormat|Symbol of hertz"
+msgid "Hz"
+msgstr "Hz"
+
+#. value without prefix, format "<val> <unit>"
+#: lib/util/kformatprivate.cpp:143
+#, qt-format
+msgctxt "KFormat|no Prefix"
+msgid "%1 %2"
+msgstr "%1 %2"
+
+#. value with prefix, format "<val> <prefix><unit>"
+#: lib/util/kformatprivate.cpp:162
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 %2%3"
+msgstr "%1 %2%3"
+
+#. MetricBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:212
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. MetricBinaryDialect size in 1000 bytes
+#: lib/util/kformatprivate.cpp:215
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 kB"
+msgstr "%1 kB"
+
+#. MetricBinaryDialect size in 10^6 bytes
+#: lib/util/kformatprivate.cpp:218
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. MetricBinaryDialect size in 10^9 bytes
+#: lib/util/kformatprivate.cpp:221
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. MetricBinaryDialect size in 10^12 bytes
+#: lib/util/kformatprivate.cpp:224
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. MetricBinaryDialect size in 10^15 bytes
+#: lib/util/kformatprivate.cpp:227
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. MetricBinaryDialect size in 10^18 byte
+#: lib/util/kformatprivate.cpp:230
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. MetricBinaryDialect size in 10^21 bytes
+#: lib/util/kformatprivate.cpp:233
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. MetricBinaryDialect size in 10^24 bytes
+#: lib/util/kformatprivate.cpp:236
+#, qt-format
+msgctxt "KFormat|MetricBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. JEDECBinaryDialect memory size in bytes
+#: lib/util/kformatprivate.cpp:242
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. JEDECBinaryDialect memory size in 1024 bytes
+#: lib/util/kformatprivate.cpp:245
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 KB"
+msgstr "%1 KB"
+
+#. JEDECBinaryDialect memory size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:248
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 MB"
+msgstr "%1 MB"
+
+#. JEDECBinaryDialect memory size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:251
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 GB"
+msgstr "%1 GB"
+
+#. JEDECBinaryDialect memory size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:254
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 TB"
+msgstr "%1 TB"
+
+#. JEDECBinaryDialect memory size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:257
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 PB"
+msgstr "%1 PB"
+
+#. JEDECBinaryDialect memory size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:260
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 EB"
+msgstr "%1 EB"
+
+#. JEDECBinaryDialect memory size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:263
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 ZB"
+msgstr "%1 ZB"
+
+#. JEDECBinaryDialect memory size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:266
+#, qt-format
+msgctxt "KFormat|JEDECBinaryDialect"
+msgid "%1 YB"
+msgstr "%1 YB"
+
+#. IECBinaryDialect size in bytes
+#: lib/util/kformatprivate.cpp:272
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 B"
+msgstr "%1 B"
+
+#. IECBinaryDialect size in 1024 bytes
+#: lib/util/kformatprivate.cpp:275
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 KiB"
+msgstr "%1 KiB"
+
+#. IECBinaryDialect size in 10^20 bytes
+#: lib/util/kformatprivate.cpp:278
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 MiB"
+msgstr "%1 MiB"
+
+#. IECBinaryDialect size in 10^30 bytes
+#: lib/util/kformatprivate.cpp:281
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 GiB"
+msgstr "%1 GiB"
+
+#. IECBinaryDialect size in 10^40 bytes
+#: lib/util/kformatprivate.cpp:284
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 TiB"
+msgstr "%1 TiB"
+
+#. IECBinaryDialect size in 10^50 bytes
+#: lib/util/kformatprivate.cpp:287
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 PiB"
+msgstr "%1 PiB"
+
+#. IECBinaryDialect size in 10^60 bytes
+#: lib/util/kformatprivate.cpp:290
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 EiB"
+msgstr "%1 EiB"
+
+#. IECBinaryDialect size in 10^70 bytes
+#: lib/util/kformatprivate.cpp:293
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 ZiB"
+msgstr "%1 ZiB"
+
+#. IECBinaryDialect size in 10^80 bytes
+#: lib/util/kformatprivate.cpp:296
+#, qt-format
+msgctxt "KFormat|IECBinaryDialect"
+msgid "%1 YiB"
+msgstr "%1 YiB"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:333
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2.%3s"
+msgstr "%1m%2.%3s"
+
+#. @item:intext Duration format minutes and seconds
+#: lib/util/kformatprivate.cpp:336
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1m%2s"
+msgstr "%1m%2s"
+
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:339
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m"
+msgstr "%1h%2m"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:342
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3.%4s"
+msgstr "%1h%2m%3.%4s"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:349
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1h%2m%3s"
+msgstr "%1h%2m%3s"
+
+#. @item:intext Duration format minutes, seconds and milliseconds
+#: lib/util/kformatprivate.cpp:355
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2.%3"
+msgstr "%1:%2.%3"
+
+#. @item:intext Duration format minutes and seconds
+#. ----------
+#. @item:intext Duration format hours and minutes
+#: lib/util/kformatprivate.cpp:358 lib/util/kformatprivate.cpp:361
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2"
+msgstr "%1:%2"
+
+#. @item:intext Duration format hours, minutes, seconds, milliseconds
+#: lib/util/kformatprivate.cpp:364
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3.%4"
+msgstr "%1:%2:%3.%4"
+
+#. @item:intext Duration format hours, minutes, seconds
+#: lib/util/kformatprivate.cpp:371
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1:%2:%3"
+msgstr "%1:%2:%3"
+
+#. @item:intext %1 is a real number, e.g. 1.23 days
+#: lib/util/kformatprivate.cpp:383
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 days"
+msgstr "%1 天"
+
+#. @item:intext %1 is a real number, e.g. 1.23 hours
+#: lib/util/kformatprivate.cpp:386
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 hours"
+msgstr "%1 小時"
+
+#. @item:intext %1 is a real number, e.g. 1.23 minutes
+#: lib/util/kformatprivate.cpp:389
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 minutes"
+msgstr "%1 分鐘"
+
+#. @item:intext %1 is a real number, e.g. 1.23 seconds
+#: lib/util/kformatprivate.cpp:392
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 seconds"
+msgstr "%1 秒"
+
+#. @item:intext %1 is a whole number
+#: lib/util/kformatprivate.cpp:397
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n millisecond(s)"
+msgid_plural "%n millisecond(s)"
+msgstr[0] "%n 毫秒"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:415
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n day(s)"
+msgid_plural "%n day(s)"
+msgstr[0] "%n 天"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:420
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n hour(s)"
+msgid_plural "%n hour(s)"
+msgstr[0] "%n 小時"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:425
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n minute(s)"
+msgid_plural "%n minute(s)"
+msgstr[0] "%n 分鐘"
+
+#. @item:intext %n is a whole number
+#: lib/util/kformatprivate.cpp:430
+#, qt-format
+msgctxt "KFormat|"
+msgid "%n second(s)"
+msgid_plural "%n second(s)"
+msgstr[0] "%n 秒"
+
+#. @item:intext days and hours. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext hours and minutes. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#. ----------
+#. @item:intext minutes and seconds. This uses the previous item:intext messages. If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:455 lib/util/kformatprivate.cpp:461
+#: lib/util/kformatprivate.cpp:467
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1 and %2"
+msgstr "%1 又 %2"
+
+#: lib/util/kformatprivate.cpp:478
+msgctxt ""
+"KFormat|used when a relative date string can't be generated because the date "
+"is invalid"
+msgid "Invalid date"
+msgstr "無效的日期"
+
+#: lib/util/kformatprivate.cpp:488
+msgctxt "KFormat|"
+msgid "In two days"
+msgstr "2天左右"
+
+#: lib/util/kformatprivate.cpp:490
+msgctxt "KFormat|"
+msgid "Tomorrow"
+msgstr "明天"
+
+#: lib/util/kformatprivate.cpp:492
+msgctxt "KFormat|"
+msgid "Today"
+msgstr "今天"
+
+#: lib/util/kformatprivate.cpp:494
+msgctxt "KFormat|"
+msgid "Yesterday"
+msgstr "昨天"
+
+#: lib/util/kformatprivate.cpp:496
+msgctxt "KFormat|"
+msgid "Two days ago"
+msgstr "2天前"
+
+#: lib/util/kformatprivate.cpp:513
+msgctxt "KFormat|"
+msgid "Just now"
+msgstr ""
+
+#: lib/util/kformatprivate.cpp:515
+#, fuzzy, qt-format
+#| msgctxt "KFormat|"
+#| msgid "%1 minutes"
+msgctxt "KFormat|"
+msgid "%1 minutes ago"
+msgstr "%1 分鐘"
+
+#. relative datetime with %1 result of formatReleativeDate() and %2 the formatted time If this does not fit the grammar of your language please contact the i18n team to solve the problem
+#: lib/util/kformatprivate.cpp:521
+#, qt-format
+msgctxt "KFormat|"
+msgid "%1, %2"
+msgstr "%1, %2"
+
+#: lib/util/klistopenfilesjob_unix.cpp:39
+#, qt-format
+msgctxt "QObject|"
+msgid "Path %1 doesn't exist"
+msgstr "%1 路徑不存在"
+
+#: lib/util/klistopenfilesjob_unix.cpp:52
+#, qt-format
+msgctxt "QObject|"
+msgid "Failed to execute `lsof' error code %1"
+msgstr "無法執行 `lsof',錯誤代碼 %1"
+
+#: lib/util/klistopenfilesjob_win.cpp:27
+msgctxt "QObject|"
+msgid "KListOpenFilesJob is not supported on Windows"
+msgstr "KListOpenFilesJob 不支援 Windows"
--- /dev/null
+# Copyright (C) YEAR This_file_is_part_of_KDE
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Frank Weng (a.k.a. Franklin) <franklin at goodhorse dot idv dot tw>, 2009, 2010.
+# Franklin Weng <franklin@goodhorse.idv.tw>, 2010, 2011, 2014.
+# Jeff Huang <s8321414@gmail.com>, 2018.
+# pan93412 <pan93412@gmail.com>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: xml_mimetypes\n"
+"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
+"POT-Creation-Date: 2021-07-14 00:15+0000\n"
+"PO-Revision-Date: 2020-01-18 19:19+0800\n"
+"Last-Translator: pan93412 <pan93412@gmail.com>\n"
+"Language-Team: Chinese <zh-l10n@lists.linux.org.tw>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 19.12.1\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: kde5.xml.podir/kde5.xml.in.h:1
+#, fuzzy
+#| msgid "RELAX NG"
+msgctxt "comment"
+msgid "RELAX NG"
+msgstr "RELAX NG"
+
+#: kde5.xml.podir/kde5.xml.in.h:2
+#, fuzzy
+#| msgid "CD audio"
+msgctxt "comment"
+msgid "CD audio"
+msgstr "CD 音效"
+
+#: kde5.xml.podir/kde5.xml.in.h:3
+#, fuzzy
+#| msgid "SNF bitmap font"
+msgctxt "comment"
+msgid "SNF bitmap font"
+msgstr "SNF Bitmap 字型"
+
+#: kde5.xml.podir/kde5.xml.in.h:4
+#, fuzzy
+#| msgid "Java applet"
+msgctxt "comment"
+msgid "Java applet"
+msgstr "Java applet"
+
+#: kde5.xml.podir/kde5.xml.in.h:5
+#, fuzzy
+#| msgid "KHTML Extension Adaptor"
+msgctxt "comment"
+msgid "KHTML Extension Adaptor"
+msgstr "KHTML 延伸裝置"
+
+#: kde5.xml.podir/kde5.xml.in.h:6
+#, fuzzy
+#| msgid "KDE color scheme"
+msgctxt "comment"
+msgid "KDE color scheme"
+msgstr "KDE 配色"
+
+#: kde5.xml.podir/kde5.xml.in.h:7
+#, fuzzy
+#| msgid "KNewStuff package"
+msgctxt "comment"
+msgid "KNewStuff package"
+msgstr "KNewStuff 套件"
+
+#: kde5.xml.podir/kde5.xml.in.h:9
+#, fuzzy
+#| msgid "KWallet wallet"
+msgctxt "comment"
+msgid "KWallet wallet"
+msgstr "KWallet 錢包"
+
+#: kde5.xml.podir/kde5.xml.in.h:10
+#, fuzzy
+#| msgid "Kugar report template"
+msgctxt "comment"
+msgid "Kugar report template"
+msgstr "Kugar 報告樣本"
+
+#: kde5.xml.podir/kde5.xml.in.h:11
+#, fuzzy
+#| msgid "plasmoid"
+msgctxt "comment"
+msgid "plasmoid"
+msgstr "Plasma 小程式"
+
+#: kde5.xml.podir/kde5.xml.in.h:12
+#, fuzzy
+#| msgid "SuperKaramba theme"
+msgctxt "comment"
+msgid "SuperKaramba theme"
+msgstr "SuperKaramba 主題"
+
+#: kde5.xml.podir/kde5.xml.in.h:13
+#, fuzzy
+#| msgid "Calligra Plan project management document"
+msgctxt "comment"
+msgid "Calligra Plan project management document"
+msgstr "Calligra Plan 專案管理文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:14
+#, fuzzy
+#| msgid "Calligra Plan work package document"
+msgctxt "comment"
+msgid "Calligra Plan work package document"
+msgstr "Calligra Plan 工作套件文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:15
+#, fuzzy
+#| msgid "KPlato project management document"
+msgctxt "comment"
+msgid "KPlato project management document"
+msgstr "KPlato 專案管理文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:16
+#, fuzzy
+#| msgid "KPlato project management work package"
+msgctxt "comment"
+msgid "KPlato project management work package"
+msgstr "KPlato 專案管理工作套件"
+
+#: kde5.xml.podir/kde5.xml.in.h:17
+#, fuzzy
+#| msgid "Kugar archive"
+msgctxt "comment"
+msgid "Kugar archive"
+msgstr "Kugar 歸檔"
+
+#: kde5.xml.podir/kde5.xml.in.h:18
+#, fuzzy
+#| msgid "web archive"
+msgctxt "comment"
+msgid "web archive"
+msgstr "網頁歸檔"
+
+#: kde5.xml.podir/kde5.xml.in.h:19
+#, fuzzy
+#| msgid "W3C XML schema"
+msgctxt "comment"
+msgid "W3C XML schema"
+msgstr "W3C XML 機制"
+
+#: kde5.xml.podir/kde5.xml.in.h:21
+#, fuzzy
+#| msgid "RealAudio plugin file"
+msgctxt "comment"
+msgid "RealAudio plugin file"
+msgstr "RealAudio 外掛程式檔案"
+
+#: kde5.xml.podir/kde5.xml.in.h:23
+#, fuzzy
+#| msgid "KPhotoAlbum import"
+msgctxt "comment"
+msgid "KPhotoAlbum import"
+msgstr "KPhotoAlbum 匯入"
+
+#: kde5.xml.podir/kde5.xml.in.h:25
+#, fuzzy
+#| msgid "HDR image"
+msgctxt "comment"
+msgid "HDR image"
+msgstr "HDR 影像"
+
+#: kde5.xml.podir/kde5.xml.in.h:26
+#, fuzzy
+#| msgid "KDE raw image formats"
+msgctxt "comment"
+msgid "KDE raw image formats"
+msgstr "KDE 原始影像格式"
+
+#: kde5.xml.podir/kde5.xml.in.h:27
+#, fuzzy
+#| msgid "Intel® hexadecimal object file"
+msgctxt "comment"
+msgid "Intel® hexadecimal object file"
+msgstr "Intel® hexadecimal 物件檔"
+
+#: kde5.xml.podir/kde5.xml.in.h:28
+#, fuzzy
+#| msgid "Kate file list loader plugin list"
+msgctxt "comment"
+msgid "Kate file list loader plugin list"
+msgstr "Kate 檔案清單載入器外掛程式清單"
+
+#: kde5.xml.podir/kde5.xml.in.h:29
+#, fuzzy
+#| msgid "abc musical notation file"
+msgctxt "comment"
+msgid "abc musical notation file"
+msgstr "abc 音樂通知檔"
+
+#: kde5.xml.podir/kde5.xml.in.h:30
+#, fuzzy
+#| msgid "fonts package"
+msgctxt "comment"
+msgid "fonts package"
+msgstr "字型套件"
+
+#: kde5.xml.podir/kde5.xml.in.h:31
+#, fuzzy
+#| msgid "Windows server"
+msgctxt "comment"
+msgid "Windows server"
+msgstr "Windows 伺服器"
+
+#: kde5.xml.podir/kde5.xml.in.h:32
+#, fuzzy
+#| msgid "Windows workgroup"
+msgctxt "comment"
+msgid "Windows workgroup"
+msgstr "Windows 工作群組"
+
+#: kde5.xml.podir/kde5.xml.in.h:34
+#, fuzzy
+#| msgid "KDE system monitor"
+msgctxt "comment"
+msgid "KDE system monitor"
+msgstr "KDE 系統監視器"
+
+#: kde5.xml.podir/kde5.xml.in.h:35
+#, fuzzy
+#| msgid "KDE theme"
+msgctxt "comment"
+msgid "KDE theme"
+msgstr "KDE 主題"
+
+#: kde5.xml.podir/kde5.xml.in.h:36
+#, fuzzy
+#| msgid "Quanta project"
+msgctxt "comment"
+msgid "Quanta project"
+msgstr "Quanta 專案"
+
+#: kde5.xml.podir/kde5.xml.in.h:37
+#, fuzzy
+#| msgid "Kommander file"
+msgctxt "comment"
+msgid "Kommander file"
+msgstr "Kommander 檔案"
+
+#: kde5.xml.podir/kde5.xml.in.h:38
+#, fuzzy
+#| msgid "potato"
+msgctxt "comment"
+msgid "potato"
+msgstr "馬鈴薯"
+
+#: kde5.xml.podir/kde5.xml.in.h:39
+#, fuzzy
+#| msgid "Kolf saved game"
+msgctxt "comment"
+msgid "Kolf saved game"
+msgstr "Kolf 儲存遊戲"
+
+#: kde5.xml.podir/kde5.xml.in.h:40
+#, fuzzy
+#| msgid "Kolf course"
+msgctxt "comment"
+msgid "Kolf course"
+msgstr "Kolf 球場"
+
+#: kde5.xml.podir/kde5.xml.in.h:41
+#, fuzzy
+#| msgid "Okular document archive"
+msgctxt "comment"
+msgid "Okular document archive"
+msgstr "Okular 文件歸檔"
+
+#: kde5.xml.podir/kde5.xml.in.h:42
+#, fuzzy
+#| msgid "Cabri figure"
+msgctxt "comment"
+msgid "Cabri figure"
+msgstr "Cabri 圖形"
+
+#: kde5.xml.podir/kde5.xml.in.h:43
+#, fuzzy
+#| msgid "Dr. Geo figure"
+msgctxt "comment"
+msgid "Dr. Geo figure"
+msgstr "Dr. Geo 圖形"
+
+#: kde5.xml.podir/kde5.xml.in.h:44
+#, fuzzy
+#| msgid "KGeo figure"
+msgctxt "comment"
+msgid "KGeo figure"
+msgstr "KGeo 圖形"
+
+#: kde5.xml.podir/kde5.xml.in.h:45
+#, fuzzy
+#| msgid "Kig figure"
+msgctxt "comment"
+msgid "Kig figure"
+msgstr "Kig 圖形"
+
+#: kde5.xml.podir/kde5.xml.in.h:46
+#, fuzzy
+#| msgid "KSeg document"
+msgctxt "comment"
+msgid "KSeg document"
+msgstr "KSeg 文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:47
+#, fuzzy
+#| msgid "vocabulary trainer document"
+msgctxt "comment"
+msgid "vocabulary trainer document"
+msgstr "字彙訓練師文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:48
+#, fuzzy
+#| msgid "KmPlot file"
+msgctxt "comment"
+msgid "KmPlot file"
+msgstr "KmPlot 檔案"
+
+#: kde5.xml.podir/kde5.xml.in.h:49
+#, fuzzy
+#| msgid "KWordQuiz vocabulary"
+msgctxt "comment"
+msgid "KWordQuiz vocabulary"
+msgstr "KWordQuiz 字彙"
+
+#: kde5.xml.podir/kde5.xml.in.h:50
+#, fuzzy
+#| msgid "Cachegrind/Callgrind profile dump"
+msgctxt "comment"
+msgid "Cachegrind/Callgrind profile dump"
+msgstr "Cachegrind/Callgrind 分析檔傾印"
+
+#: kde5.xml.podir/kde5.xml.in.h:51
+#, fuzzy
+#| msgid "Umbrello UML Modeller file"
+msgctxt "comment"
+msgid "Umbrello UML Modeller file"
+msgstr "Umbrello UML 建模工具檔"
+
+#: kde5.xml.podir/kde5.xml.in.h:52
+#, fuzzy
+#| msgid "Windows link"
+msgctxt "comment"
+msgid "Windows link"
+msgstr "Windows 連結檔案"
+
+#: kde5.xml.podir/kde5.xml.in.h:53
+#, fuzzy
+#| msgid "KGet download list"
+msgctxt "comment"
+msgid "KGet download list"
+msgstr "KGet 下載清單"
+
+#: kde5.xml.podir/kde5.xml.in.h:54
+#, fuzzy
+#| msgid "Kopete emoticons archive"
+msgctxt "comment"
+msgid "Kopete emoticons archive"
+msgstr "Kopete 表情圖示歸檔"
+
+#: kde5.xml.podir/kde5.xml.in.h:55
+#, fuzzy
+#| msgid "ICQ contact"
+msgctxt "comment"
+msgid "ICQ contact"
+msgstr "ICQ 聯絡人"
+
+#: kde5.xml.podir/kde5.xml.in.h:57
+#, fuzzy
+#| msgid "Microsoft Media Format"
+msgctxt "comment"
+msgid "Microsoft Media Format"
+msgstr "微軟媒體格式"
+
+#: kde5.xml.podir/kde5.xml.in.h:59
+#, fuzzy
+#| msgid "Turtle RDF document"
+msgctxt "comment"
+msgid "Turtle RDF document"
+msgstr "Turtle RDF 文件"
+
+#: kde5.xml.podir/kde5.xml.in.h:61
+#, fuzzy
+#| msgid "Softimage PIC image"
+msgctxt "comment"
+msgid "Softimage PIC image"
+msgstr "Softimage PIC 影像"
+
+#: kde5.xml.podir/kde5.xml.in.h:63
+#, fuzzy
+#| msgid "Qt Markup Language file"
+msgctxt "comment"
+msgid "Qt Markup Language file"
+msgstr "Qt 標示語言檔"
+
+#: kde5.xml.podir/kde5.xml.in.h:64
+#, fuzzy
+#| msgid "KConfigXT Configuration Options"
+msgctxt "comment"
+msgid "KConfigXT Configuration Options"
+msgstr "KConfigXT 設定選項"
+
+#: kde5.xml.podir/kde5.xml.in.h:65
+#, fuzzy
+#| msgid "KConfigXT Code Generation Options"
+msgctxt "comment"
+msgid "KConfigXT Code Generation Options"
+msgstr "KConfigXT 代碼產生選項"
+
+#: kde5.xml.podir/kde5.xml.in.h:66
+#, fuzzy
+#| msgid "KXMLGUI UI Declaration"
+msgctxt "comment"
+msgid "KXMLGUI UI Declaration"
+msgstr "KXMLGUI UI 宣告"
+
+#: kde5.xml.podir/kde5.xml.in.h:67
+#, fuzzy
+#| msgid "KNotification Declaration"
+msgctxt "comment"
+msgid "KNotification Declaration"
+msgstr "KNotification 宣告"
+
+#: kde5.xml.podir/kde5.xml.in.h:68
+#, fuzzy
+#| msgid "KCrash Report"
+msgctxt "comment"
+msgid "KCrash Report"
+msgstr "KCrash 報告"
--- /dev/null
+add_subdirectory(lib)
+add_subdirectory(mimetypes)
+
+add_subdirectory(desktoptojson)
+
+ecm_qt_install_logging_categories(
+ EXPORT KCOREADDONS
+ FILE kcoreaddons.categories
+ DESTINATION "${KDE_INSTALL_LOGGINGCATEGORIESDIR}"
+)
--- /dev/null
+#!/bin/sh
+
+# Extract strings from all source files.
+# EXTRACT_TR_STRINGS extracts strings with lupdate and convert them to .pot with
+# lconvert.
+$EXTRACT_TR_STRINGS `find . -name \*.cpp -o -name \*.h -o -name \*.ui -o -name \*.qml` -o $podir/kcoreaddons5_qt.pot
--- /dev/null
+include(ECMMarkNonGuiExecutable)
+
+add_executable(desktoptojson)
+
+ecm_qt_declare_logging_category(desktoptojson
+ HEADER desktoptojson_debug.h
+ # reusing the one also used with desktopfileparser.cpp in library case
+ IDENTIFIER DESKTOPPARSER
+ CATEGORY_NAME kf.coreaddons.desktoptojson
+ # enable debug messages of desktopfileparser.cpp by default, other than in library case
+ DEFAULT_SEVERITY Debug
+ DESCRIPTION "desktoptojson (KCoreAddons)"
+ EXPORT KCOREADDONS
+)
+
+target_sources(desktoptojson PRIVATE
+ main.cpp
+ desktoptojson.cpp
+ ../lib/plugin/desktopfileparser.cpp
+)
+if(NOT CMAKE_TOOLCHAIN_FILE)
+ add_executable(KF5::desktoptojson ALIAS desktoptojson)
+endif()
+
+set_property(TARGET desktoptojson PROPERTY CXX_STANDARD 14)
+
+# Mark it as non-gui so we won't create an app bundle on Mac OS X
+ecm_mark_nongui_executable(desktoptojson)
+
+target_link_libraries(desktoptojson Qt5::Core)
+target_compile_definitions(desktoptojson PRIVATE BUILDING_DESKTOPTOJSON_TOOL=1)
+
+install(TARGETS desktoptojson EXPORT KF5CoreAddonsToolingTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS})
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include "desktoptojson.h"
+
+#include "../lib/kcoreaddons_export.h"
+#include "../lib/plugin/desktopfileparser_p.h"
+#include "desktoptojson_debug.h"
+
+#include <QFile>
+#include <QFileInfo>
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonObject>
+
+DesktopToJson::DesktopToJson(QCommandLineParser *parser,
+ const QCommandLineOption &i,
+ const QCommandLineOption &o,
+ const QCommandLineOption &v,
+ const QCommandLineOption &c,
+ const QCommandLineOption &s)
+ : m_parser(parser)
+ , input(i)
+ , output(o)
+ , verbose(v)
+ , compat(c)
+ , serviceTypesOption(s)
+{
+}
+
+bool DesktopFileParser::s_verbose = false;
+bool DesktopFileParser::s_compatibilityMode = false;
+
+int DesktopToJson::runMain()
+{
+ if (!m_parser->isSet(input)) {
+ m_parser->showHelp(1);
+ return 1;
+ }
+ if (m_parser->isSet(verbose)) {
+ DesktopFileParser::s_verbose = true;
+ }
+ if (m_parser->isSet(compat)) {
+ DesktopFileParser::s_compatibilityMode = true;
+ }
+ if (!resolveFiles()) {
+ qCCritical(DESKTOPPARSER) << "Failed to resolve filenames" << m_inFile << m_outFile;
+ return 1;
+ }
+
+#pragma message("TODO: make it an error if one of the service type files is invalid or not found")
+ const QStringList serviceTypes = m_parser->values(serviceTypesOption);
+ return convert(m_inFile, m_outFile, serviceTypes) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+bool DesktopToJson::resolveFiles()
+{
+ if (m_parser->isSet(input)) {
+ m_inFile = m_parser->value(input);
+ const QFileInfo fi(m_inFile);
+ if (!fi.exists()) {
+ qCCritical(DESKTOPPARSER) << "File not found: " << m_inFile;
+ return false;
+ }
+ if (!fi.isAbsolute()) {
+ m_inFile = fi.absoluteFilePath();
+ }
+ }
+
+ if (m_parser->isSet(output)) {
+ m_outFile = m_parser->value(output);
+ } else if (!m_inFile.isEmpty()) {
+ m_outFile = m_inFile;
+ m_outFile.replace(QStringLiteral(".desktop"), QStringLiteral(".json"));
+ }
+
+ return m_inFile != m_outFile && !m_inFile.isEmpty() && !m_outFile.isEmpty();
+}
+
+void DesktopFileParser::convertToCompatibilityJson(const QString &key, const QString &value, QJsonObject &json, int lineNr)
+{
+ // XXX: Hidden=true doesn't make sense with json plugins since the metadata is inside the .so
+ static const QStringList boolkeys = QStringList{
+ QStringLiteral("Hidden"),
+ QStringLiteral("X-KDE-PluginInfo-EnabledByDefault"),
+ };
+ static const QStringList stringlistkeys = QStringList
+ {
+ QStringLiteral("X-KDE-ServiceTypes"),
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 79)
+ QStringLiteral("X-KDE-PluginInfo-Depends"),
+#endif
+ };
+ if (boolkeys.contains(key)) {
+ // should only be lower case, but be tolerant here
+ if (value.toLower() == QLatin1String("true")) {
+ json[key] = true;
+ } else {
+ if (value.toLower() != QLatin1String("false")) {
+ qCWarning(DESKTOPPARSER).nospace() << "Expected boolean value for key \"" << key << "\" at line " << lineNr << "but got \"" << value
+ << "\" instead.";
+ }
+ json[key] = false;
+ }
+ } else if (stringlistkeys.contains(key)) {
+ json[key] = QJsonArray::fromStringList(DesktopFileParser::deserializeList(value));
+ } else {
+ json[key] = value;
+ }
+}
+
+bool DesktopToJson::convert(const QString &src, const QString &dest, const QStringList &serviceTypes)
+{
+ QJsonObject json;
+ DesktopFileParser::convert(src, serviceTypes, json, nullptr);
+
+ if (DesktopFileParser::s_compatibilityMode) {
+ Q_ASSERT(json.value(QStringLiteral("KPlugin")).toObject().isEmpty());
+ json.remove(QStringLiteral("KPlugin"));
+ }
+ QJsonDocument jdoc;
+ jdoc.setObject(json);
+
+ QFile file(dest);
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ qCCritical(DESKTOPPARSER) << "Failed to open " << dest;
+ return false;
+ }
+
+ file.write(jdoc.toJson());
+ qCDebug(DESKTOPPARSER) << "Generated " << dest;
+ return true;
+}
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#ifndef DESKTOPTOJSON_H
+#define DESKTOPTOJSON_H
+
+#include <QCommandLineOption>
+#include <QCommandLineParser>
+#include <QString>
+
+class QCommandLineParser;
+
+class DesktopToJson
+{
+public:
+ DesktopToJson(QCommandLineParser *parser,
+ const QCommandLineOption &i,
+ const QCommandLineOption &o,
+ const QCommandLineOption &v,
+ const QCommandLineOption &c,
+ const QCommandLineOption &s);
+ int runMain();
+
+private:
+ bool convert(const QString &src, const QString &dest, const QStringList &serviceTypes);
+ void convertToJson(const QString &key, const QString &value, QJsonObject &json, QJsonObject &kplugin, int lineNr);
+ void convertToCompatibilityJson(const QString &key, const QString &value, QJsonObject &json, int lineNr);
+ bool resolveFiles();
+
+ QCommandLineParser *const m_parser;
+ const QCommandLineOption input;
+ const QCommandLineOption output;
+ const QCommandLineOption verbose;
+ const QCommandLineOption compat;
+ const QCommandLineOption serviceTypesOption;
+ QString m_inFile;
+ QString m_outFile;
+};
+
+#endif
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include "desktoptojson.h"
+
+static void messageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
+{
+ auto getFprintfS = [](auto data) {
+ if (data == nullptr)
+ return "";
+ return data;
+ };
+
+ QByteArray localMsg = msg.toLocal8Bit();
+
+ switch (type) {
+ case QtDebugMsg:
+ fprintf(stdout, "%s\n", getFprintfS(localMsg.constData()));
+ break;
+ case QtInfoMsg:
+ fprintf(stdout, "Info: %s (%s:%u, %s)\n", getFprintfS(localMsg.constData()), getFprintfS(context.file), context.line, getFprintfS(context.function));
+ break;
+ case QtWarningMsg:
+ fprintf(stderr, "Warning: %s (%s:%u, %s)\n", getFprintfS(localMsg.constData()), getFprintfS(context.file), context.line, getFprintfS(context.function));
+ break;
+ case QtCriticalMsg:
+ fprintf(stderr, "Error: %s (%s:%u, %s)\n", getFprintfS(localMsg.constData()), getFprintfS(context.file), context.line, getFprintfS(context.function));
+ break;
+ case QtFatalMsg:
+ fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", getFprintfS(localMsg.constData()), getFprintfS(context.file), context.line, getFprintfS(context.function));
+ abort();
+ }
+}
+
+int main(int argc, char **argv)
+{
+ qInstallMessageHandler(messageOutput);
+ QCoreApplication app(argc, argv);
+
+ const QString description = QStringLiteral("Converts desktop files to json");
+ app.setApplicationVersion(QStringLiteral("1.0"));
+
+ const auto _i = QStringLiteral("input");
+ const auto _o = QStringLiteral("output");
+ const auto _n = QStringLiteral("name");
+ const auto _c = QStringLiteral("compat");
+ const auto _s = QStringLiteral("serviceType");
+
+ QCommandLineOption input = QCommandLineOption(QStringList{QStringLiteral("i"), _i}, QStringLiteral("Read input from file"), _n);
+ QCommandLineOption output = QCommandLineOption(QStringList{QStringLiteral("o"), _o}, QStringLiteral("Write output to file"), _n);
+ QCommandLineOption verbose = QCommandLineOption(QStringList{QStringLiteral("verbose")}, QStringLiteral("Enable verbose (debug) output"));
+ QCommandLineOption compat = QCommandLineOption(QStringList{QStringLiteral("c"), _c},
+ QStringLiteral("Generate JSON that is compatible with KPluginInfo instead of the new KPluginMetaData"));
+ QCommandLineOption serviceTypes =
+ QCommandLineOption(QStringList{QStringLiteral("s"), _s},
+ QStringLiteral("The name or full path of a KServiceType definition .desktop file. Can be passed multiple times"),
+ _s);
+
+ QCommandLineParser parser;
+ parser.addVersionOption();
+ parser.setApplicationDescription(description);
+ parser.addHelpOption();
+ parser.addOption(input);
+ parser.addOption(output);
+ parser.addOption(verbose);
+ parser.addOption(compat);
+ parser.addOption(serviceTypes);
+
+ DesktopToJson dtj(&parser, input, output, verbose, compat, serviceTypes);
+
+ parser.process(app);
+ return dtj.runMain();
+}
--- /dev/null
+# Configure checks for the caching subdir
+include(CheckIncludeFiles)
+check_include_files("sys/types.h;sys/mman.h" HAVE_SYS_MMAN_H)
+configure_file(caching/config-caching.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-caching.h)
+
+include(CheckSymbolExists)
+check_symbol_exists("getgrouplist" "grp.h" HAVE_GETGROUPLIST)
+configure_file(util/config-getgrouplist.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-getgrouplist.h)
+
+set (KDE4_DEFAULT_HOME ".kde${_KDE4_DEFAULT_HOME_POSTFIX}" CACHE STRING "The default KDE home directory" )
+configure_file(util/config-kde4home.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kde4home.h)
+
+set (ACCOUNTS_SERVICE_ICON_DIR "/var/lib/AccountsService/icons" CACHE STRING "Accounts Services icon storage directory")
+configure_file(util/config-accountsservice.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-accountsservice.h)
+
+add_library(KF5CoreAddons)
+add_library(KF5::CoreAddons ALIAS KF5CoreAddons)
+
+ecm_create_qm_loader(KF5CoreAddons kcoreaddons5_qt)
+
+if (FAM_FOUND)
+ target_include_directories(KF5CoreAddons PRIVATE ${FAM_INCLUDE_DIR})
+ target_link_libraries(KF5CoreAddons PRIVATE ${FAM_LIBRARIES})
+endif ()
+
+if (Inotify_FOUND)
+ target_include_directories(KF5CoreAddons PRIVATE ${Inotify_INCLUDE_DIRS})
+ target_link_libraries(KF5CoreAddons PRIVATE ${Inotify_LIBRARIES})
+endif ()
+
+if(NOT WIN32)
+ target_sources(KF5CoreAddons PRIVATE
+ caching/kshareddatacache.cpp
+ )
+
+ set_source_files_properties(caching/kshareddatacache.cpp
+ PROPERTIES COMPILE_FLAGS -fexceptions)
+
+ target_link_libraries(KF5CoreAddons PRIVATE Threads::Threads)
+else()
+ target_sources(KF5CoreAddons PRIVATE
+ caching/kshareddatacache_win.cpp
+ )
+endif()
+
+if (WIN32)
+ target_sources(KF5CoreAddons PRIVATE
+ text/kmacroexpander_win.cpp
+ util/klistopenfilesjob_win.cpp
+ util/kprocesslist_win.cpp
+ util/kshell_win.cpp
+ util/kuser_win.cpp
+ )
+endif ()
+
+if (UNIX)
+ target_sources(KF5CoreAddons PRIVATE
+ text/kmacroexpander_unix.cpp
+ util/klistopenfilesjob_unix.cpp
+ util/kuser_unix.cpp
+ util/kshell_unix.cpp
+ )
+ if (HAVE_PROCSTAT)
+ target_sources(KF5CoreAddons PRIVATE
+ util/kprocesslist_unix_procstat.cpp
+ )
+ else ()
+ target_sources(KF5CoreAddons PRIVATE
+ util/kprocesslist_unix.cpp
+ )
+ endif ()
+endif ()
+
+target_sources(KF5CoreAddons PRIVATE
+ kaboutdata.cpp
+ kcoreaddons.cpp
+ io/kautosavefile.cpp
+ io/kdirwatch.cpp
+ io/kfilesystemtype.cpp
+ io/kmessage.cpp
+ io/kprocess.cpp
+ io/kbackup.cpp
+ io/kurlmimedata.cpp
+ io/kfileutils.cpp
+ io/knetworkmounts.cpp
+ jobs/kcompositejob.cpp
+ jobs/kjob.cpp
+ jobs/kjobtrackerinterface.cpp
+ jobs/kjobuidelegate.cpp
+ plugin/kpluginfactory.cpp
+ plugin/kpluginloader.cpp
+ plugin/kpluginmetadata.cpp
+ plugin/desktopfileparser.cpp
+ randomness/krandom.cpp
+ randomness/krandomsequence.cpp
+ text/kfuzzymatcher.cpp
+ text/kmacroexpander.cpp
+ text/kstringhandler.cpp
+ text/ktexttohtml.cpp
+ util/kdelibs4migration.cpp
+ util/kdelibs4configmigrator.cpp
+ util/kformat.cpp
+ util/kformatprivate.cpp
+ util/kosrelease.cpp
+ util/kprocesslist.cpp
+ util/kshell.cpp
+)
+
+
+set(kcoreaddons_INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}/../.. # for kcoreaddons_version.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/caching/
+ ${CMAKE_CURRENT_BINARY_DIR}/io/
+ ${CMAKE_CURRENT_SOURCE_DIR}/io/
+ ${CMAKE_CURRENT_SOURCE_DIR}/jobs/
+ ${CMAKE_CURRENT_SOURCE_DIR}/plugin/
+ ${CMAKE_CURRENT_SOURCE_DIR}/randomness/
+ ${CMAKE_CURRENT_SOURCE_DIR}/text/
+ ${CMAKE_CURRENT_SOURCE_DIR}/util/
+)
+
+if (HAVE_PROCSTAT)
+ set(kcoreaddons_INCLUDE_DIRS
+ ${kcoreaddons_INCLUDE_DIRS}
+ ${PROCSTAT_INCLUDE_DIR}
+ )
+endif()
+
+ecm_qt_export_logging_category(
+ IDENTIFIER KDIRWATCH
+ CATEGORY_NAME kf.coreaddons.kdirwatch
+ OLD_CATEGORY_NAMES kf5.kcoreaddons.kdirwatch
+ DEFAULT_SEVERITY Warning
+ DESCRIPTION "KDirWatch (KCoreAddons)"
+ EXPORT KCOREADDONS
+)
+ecm_qt_export_logging_category(
+ IDENTIFIER KABOUTDATA
+ CATEGORY_NAME kf.coreaddons.kaboutdata
+ OLD_CATEGORY_NAMES kf5.kcoreaddons.kaboutdata
+ DESCRIPTION "KAboutData (KCoreAddons)"
+ EXPORT KCOREADDONS
+)
+ecm_qt_declare_logging_category(KF5CoreAddons
+ HEADER desktopfileparser_debug.h
+ IDENTIFIER DESKTOPPARSER
+ CATEGORY_NAME kf.coreaddons.desktopparser
+ OLD_CATEGORY_NAMES kf5.kcoreaddons.desktopparser
+ DEFAULT_SEVERITY Warning
+ DESCRIPTION "DesktopParser (KCoreAddons)"
+ EXPORT KCOREADDONS
+)
+ecm_qt_export_logging_category(
+ IDENTIFIER MIGRATOR
+ CATEGORY_NAME kf.coreaddons.kdelibs4configmigrator
+ OLD_CATEGORY_NAMES kf5.kcoreaddons.kdelibs4configmigrator
+ DEFAULT_SEVERITY Warning
+ DESCRIPTION "Kdelibs4ConfigMigrator (KCoreAddons)"
+ EXPORT KCOREADDONS
+)
+
+ecm_qt_declare_logging_category(KF5CoreAddons
+ HEADER kcoreaddons_debug.h
+ IDENTIFIER KCOREADDONS_DEBUG
+ CATEGORY_NAME kf.coreaddons
+ OLD_CATEGORY_NAMES org.kde.kcoreaddons
+ DESCRIPTION "kcoreaddons (kcoreaddons lib)"
+ EXPORT KCOREADDONS
+)
+
+ecm_generate_export_header(KF5CoreAddons
+ BASE_NAME KCoreAddons
+ GROUP_BASE_NAME KF
+ VERSION ${KF_VERSION}
+ DEPRECATED_BASE_VERSION 0
+ DEPRECATION_VERSIONS 4.0 5.0 5.2 5.65 5.67 5.70 5.72 5.75 5.76 5.78 5.79 5.80 5.84
+ EXCLUDE_DEPRECATED_BEFORE_AND_AT ${EXCLUDE_DEPRECATED_BEFORE_AND_AT}
+)
+
+target_include_directories(KF5CoreAddons PUBLIC "$<BUILD_INTERFACE:${kcoreaddons_INCLUDE_DIRS}>")
+
+target_link_libraries(KF5CoreAddons
+ PUBLIC
+ Qt5::Core
+)
+
+if(WIN32)
+ target_link_libraries(KF5CoreAddons PRIVATE netapi32 userenv)
+endif()
+
+if (HAVE_PROCSTAT)
+ target_link_libraries(KF5CoreAddons PRIVATE ${PROCSTAT_LIBRARIES})
+endif()
+
+target_include_directories(KF5CoreAddons INTERFACE "$<INSTALL_INTERFACE:${KDE_INSTALL_INCLUDEDIR_KF5}/KCoreAddons>" )
+
+target_compile_definitions(KF5CoreAddons INTERFACE "$<INSTALL_INTERFACE:KCOREADDONS_LIB>")
+
+set_target_properties(KF5CoreAddons PROPERTIES VERSION ${KCOREADDONS_VERSION}
+ SOVERSION ${KCOREADDONS_SOVERSION}
+ EXPORT_NAME CoreAddons
+)
+
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KAboutData
+ KCoreAddons
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES KSharedDataCache
+ RELATIVE caching
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KAutoSaveFile
+ KDirWatch
+ KMessage
+ KProcess
+ KBackup
+ KUrlMimeData
+ KFileSystemType
+ KFileUtils
+ KNetworkMounts
+ RELATIVE io
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KCompositeJob
+ KJob
+ KJobTrackerInterface
+ KJobUiDelegate
+ RELATIVE jobs
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KExportPlugin
+ KPluginFactory
+ KPluginLoader
+ KPluginMetaData
+ RELATIVE plugin
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KRandom
+ KRandomSequence
+ RELATIVE randomness
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KFuzzyMatcher
+ KMacroExpander
+ KStringHandler
+ KTextToHTML
+ KTextToHTMLEmoticonsInterface
+ RELATIVE text
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+ecm_generate_headers(KCoreAddons_HEADERS
+ HEADER_NAMES
+ KFormat
+ KOSRelease
+ KUser
+ KShell
+ KProcessList
+ KListOpenFilesJob
+ Kdelibs4Migration
+ Kdelibs4ConfigMigrator
+ RELATIVE util
+ REQUIRED_HEADERS KCoreAddons_HEADERS
+)
+
+find_package(PythonModuleGeneration)
+
+if (PythonModuleGeneration_FOUND)
+ ecm_generate_python_binding(
+ TARGET KF5::CoreAddons
+ PYTHONNAMESPACE PyKF5
+ MODULENAME KCoreAddons
+ RULES_FILE "${CMAKE_SOURCE_DIR}/cmake/rules_PyKF5.py"
+ SIP_DEPENDS
+ QtCore/QtCoremod.sip
+ HEADERS
+ kaboutdata.h
+ kcoreaddons.h
+ caching/kshareddatacache.h
+ io/kautosavefile.h
+ io/kdirwatch.h
+ io/kmessage.h
+ io/kprocess.h
+ io/kbackup.h
+ io/kurlmimedata.h
+ io/kfilesystemtype.h
+ jobs/kcompositejob.h
+ jobs/kjob.h
+ jobs/kjobtrackerinterface.h
+ jobs/kjobuidelegate.h
+ plugin/kexportplugin.h
+ plugin/kpluginfactory.h
+ plugin/kpluginloader.h
+ plugin/kpluginmetadata.h
+ randomness/krandom.h
+ randomness/krandomsequence.h
+ text/kmacroexpander.h
+ text/kstringhandler.h
+ text/ktexttohtml.h
+ text/ktexttohtmlemoticonsinterface.h
+ util/kformat.h
+ util/klistopenfilesjob.h
+ util/kosrelease.h
+ util/kprocesslist.h
+ util/kuser.h
+ util/kshell.h
+ util/kdelibs4migration.h
+ util/kdelibs4configmigrator.h
+ )
+endif()
+
+install(TARGETS KF5CoreAddons EXPORT KF5CoreAddonsTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS})
+
+install(FILES
+ ${KCoreAddons_HEADERS}
+ ${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_export.h
+ DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/KCoreAddons COMPONENT Devel
+)
+
+# Includes CMake code to install open-source license texts for KAboutData.
+add_subdirectory(licenses)
+
+if(BUILD_QCH)
+ ecm_add_qch(
+ KF5CoreAddons_QCH
+ NAME KCoreAddons
+ BASE_NAME KF5CoreAddons
+ VERSION ${KF_VERSION}
+ ORG_DOMAIN org.kde
+ SOURCES # using only public headers, to cover only public API
+ ${KCoreAddons_HEADERS}
+ MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md"
+ LINK_QCHS
+ Qt5Core_QCH
+ INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${kcoreaddons_INCLUDE_DIRS}
+ BLANK_MACROS
+ KCOREADDONS_EXPORT
+ KCOREADDONS_DEPRECATED
+ KCOREADDONS_DEPRECATED_EXPORT
+ "KCOREADDONS_DEPRECATED_VERSION(x, y, t)"
+ TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
+ QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
+ COMPONENT Devel
+ )
+endif()
+
+include(ECMGeneratePriFile)
+ecm_generate_pri_file(BASE_NAME KCoreAddons LIB_NAME KF5CoreAddons DEPS "core" FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR_KF5}/KCoreAddons)
+install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})
--- /dev/null
+#cmakedefine01 HAVE_SYS_MMAN_H
+
--- /dev/null
+/*
+ This file is part of the KDE project.
+
+ SPDX-FileCopyrightText: 2010, 2012 Michael Pyne <mpyne@kde.org>
+ SPDX-FileCopyrightText: 2012 Ralf Jung <ralfjung-e@gmx.de>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+
+ This library includes "MurmurHash" code from Austin Appleby, which is
+ placed in the public domain. See http://sites.google.com/site/murmurhash/
+*/
+
+#include "kshareddatacache.h"
+#include "kcoreaddons_debug.h"
+#include "kshareddatacache_p.h" // Various auxiliary support code
+
+#include <QStandardPaths>
+#include <qplatformdefs.h>
+
+#include <QAtomicInt>
+#include <QByteArray>
+#include <QDir>
+#include <QFile>
+#include <QMutex>
+#include <QRandomGenerator>
+#include <QSharedPointer>
+
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+
+/// The maximum number of probes to make while searching for a bucket in
+/// the presence of collisions in the cache index table.
+static const uint MAX_PROBE_COUNT = 6;
+
+/**
+ * A very simple class whose only purpose is to be thrown as an exception from
+ * underlying code to indicate that the shared cache is apparently corrupt.
+ * This must be caught by top-level library code and used to unlink the cache
+ * in this circumstance.
+ *
+ * @internal
+ */
+class KSDCCorrupted
+{
+public:
+ KSDCCorrupted()
+ {
+ qCCritical(KCOREADDONS_DEBUG) << "Error detected in cache, re-generating";
+ }
+};
+
+//-----------------------------------------------------------------------------
+// MurmurHashAligned, by Austin Appleby
+// (Released to the public domain, or licensed under the MIT license where
+// software may not be released to the public domain. See
+// http://sites.google.com/site/murmurhash/)
+
+// Same algorithm as MurmurHash, but only does aligned reads - should be safer
+// on certain platforms.
+static unsigned int MurmurHashAligned(const void *key, int len, unsigned int seed)
+{
+ const unsigned int m = 0xc6a4a793;
+ const int r = 16;
+
+ const unsigned char *data = reinterpret_cast<const unsigned char *>(key);
+
+ unsigned int h = seed ^ (len * m);
+
+ int align = reinterpret_cast<quintptr>(data) & 3;
+
+ if (align && len >= 4) {
+ // Pre-load the temp registers
+
+ unsigned int t = 0, d = 0;
+
+ switch (align) {
+ case 1:
+ t |= data[2] << 16;
+ Q_FALLTHROUGH();
+ case 2:
+ t |= data[1] << 8;
+ Q_FALLTHROUGH();
+ case 3:
+ t |= data[0];
+ }
+
+ t <<= (8 * align);
+
+ data += 4 - align;
+ len -= 4 - align;
+
+ int sl = 8 * (4 - align);
+ int sr = 8 * align;
+
+ // Mix
+
+ while (len >= 4) {
+ d = *reinterpret_cast<const unsigned int *>(data);
+ t = (t >> sr) | (d << sl);
+ h += t;
+ h *= m;
+ h ^= h >> r;
+ t = d;
+
+ data += 4;
+ len -= 4;
+ }
+
+ // Handle leftover data in temp registers
+
+ int pack = len < align ? len : align;
+
+ d = 0;
+
+ switch (pack) {
+ case 3:
+ d |= data[2] << 16;
+ Q_FALLTHROUGH();
+ case 2:
+ d |= data[1] << 8;
+ Q_FALLTHROUGH();
+ case 1:
+ d |= data[0];
+ Q_FALLTHROUGH();
+ case 0:
+ h += (t >> sr) | (d << sl);
+ h *= m;
+ h ^= h >> r;
+ }
+
+ data += pack;
+ len -= pack;
+ } else {
+ while (len >= 4) {
+ h += *reinterpret_cast<const unsigned int *>(data);
+ h *= m;
+ h ^= h >> r;
+
+ data += 4;
+ len -= 4;
+ }
+ }
+
+ //----------
+ // Handle tail bytes
+
+ switch (len) {
+ case 3:
+ h += data[2] << 16;
+ Q_FALLTHROUGH();
+ case 2:
+ h += data[1] << 8;
+ Q_FALLTHROUGH();
+ case 1:
+ h += data[0];
+ h *= m;
+ h ^= h >> r;
+ };
+
+ h *= m;
+ h ^= h >> 10;
+ h *= m;
+ h ^= h >> 17;
+
+ return h;
+}
+
+/**
+ * This is the hash function used for our data to hopefully make the
+ * hashing used to place the QByteArrays as efficient as possible.
+ */
+static quint32 generateHash(const QByteArray &buffer)
+{
+ // The final constant is the "seed" for MurmurHash. Do *not* change it
+ // without incrementing the cache version.
+ return MurmurHashAligned(buffer.data(), buffer.size(), 0xF0F00F0F);
+}
+
+// Alignment concerns become a big deal when we're dealing with shared memory,
+// since trying to access a structure sized at, say 8 bytes at an address that
+// is not evenly divisible by 8 is a crash-inducing error on some
+// architectures. The compiler would normally take care of this, but with
+// shared memory the compiler will not necessarily know the alignment expected,
+// so make sure we account for this ourselves. To do so we need a way to find
+// out the expected alignment. Enter ALIGNOF...
+#ifndef ALIGNOF
+#if defined(Q_CC_GNU) || defined(Q_CC_SUN)
+#define ALIGNOF(x) (__alignof__(x)) // GCC provides what we want directly
+#else
+
+#include <stddef.h> // offsetof
+
+template<class T>
+struct __alignmentHack {
+ char firstEntry;
+ T obj;
+ static const size_t size = offsetof(__alignmentHack, obj);
+};
+#define ALIGNOF(x) (__alignmentHack<x>::size)
+#endif // Non gcc
+#endif // ALIGNOF undefined
+
+// Returns a pointer properly aligned to handle size alignment.
+// size should be a power of 2. start is assumed to be the lowest
+// permissible address, therefore the return value will be >= start.
+template<class T>
+T *alignTo(const void *start, uint size = ALIGNOF(T))
+{
+ quintptr mask = size - 1;
+
+ // Cast to int-type to handle bit-twiddling
+ quintptr basePointer = reinterpret_cast<quintptr>(start);
+
+ // If (and only if) we are already aligned, adding mask into basePointer
+ // will not increment any of the bits in ~mask and we get the right answer.
+ basePointer = (basePointer + mask) & ~mask;
+
+ return reinterpret_cast<T *>(basePointer);
+}
+
+/**
+ * Returns a pointer to a const object of type T, assumed to be @p offset
+ * *BYTES* greater than the base address. Note that in order to meet alignment
+ * requirements for T, it is possible that the returned pointer points greater
+ * than @p offset into @p base.
+ */
+template<class T>
+const T *offsetAs(const void *const base, qint32 offset)
+{
+ const char *ptr = reinterpret_cast<const char *>(base);
+ return alignTo<const T>(ptr + offset);
+}
+
+// Same as above, but for non-const objects
+template<class T>
+T *offsetAs(void *const base, qint32 offset)
+{
+ char *ptr = reinterpret_cast<char *>(base);
+ return alignTo<T>(ptr + offset);
+}
+
+/**
+ * @return the smallest integer greater than or equal to (@p a / @p b).
+ * @param a Numerator, should be ≥ 0.
+ * @param b Denominator, should be > 0.
+ */
+static unsigned intCeil(unsigned a, unsigned b)
+{
+ // The overflow check is unsigned and so is actually defined behavior.
+ if (Q_UNLIKELY(b == 0 || ((a + b) < a))) {
+ throw KSDCCorrupted();
+ }
+
+ return (a + b - 1) / b;
+}
+
+/**
+ * @return number of set bits in @p value (see also "Hamming weight")
+ */
+static unsigned countSetBits(unsigned value)
+{
+ // K&R / Wegner's algorithm used. GCC supports __builtin_popcount but we
+ // expect there to always be only 1 bit set so this should be perhaps a bit
+ // faster 99.9% of the time.
+ unsigned count = 0;
+ for (count = 0; value != 0; count++) {
+ value &= (value - 1); // Clears least-significant set bit.
+ }
+ return count;
+}
+
+typedef qint32 pageID;
+
+// =========================================================================
+// Description of the cache:
+//
+// The shared memory cache is designed to be handled as two separate objects,
+// all contained in the same global memory segment. First off, there is the
+// basic header data, consisting of the global header followed by the
+// accounting data necessary to hold items (described in more detail
+// momentarily). Following the accounting data is the start of the "page table"
+// (essentially just as you'd see it in an Operating Systems text).
+//
+// The page table contains shared memory split into fixed-size pages, with a
+// configurable page size. In the event that the data is too large to fit into
+// a single logical page, it will need to occupy consecutive pages of memory.
+//
+// The accounting data that was referenced earlier is split into two:
+//
+// 1. index table, containing a fixed-size list of possible cache entries.
+// Each index entry is of type IndexTableEntry (below), and holds the various
+// accounting data and a pointer to the first page.
+//
+// 2. page table, which is used to speed up the process of searching for
+// free pages of memory. There is one entry for every page in the page table,
+// and it contains the index of the one entry in the index table actually
+// holding the page (or <0 if the page is free).
+//
+// The entire segment looks like so:
+// ?════════?═════════════?════════════?═══════?═══════?═══════?═══════?═══?
+// ? Header │ Index Table │ Page Table ? Pages │ │ │ │...?
+// ?════════?═════════════?════════════?═══════?═══════?═══════?═══════?═══?
+// =========================================================================
+
+// All elements of this struct must be "plain old data" (POD) types since it
+// will be in shared memory. In addition, no pointers! To point to something
+// you must use relative offsets since the pointer start addresses will be
+// different in each process.
+struct IndexTableEntry {
+ uint fileNameHash;
+ uint totalItemSize; // in bytes
+ mutable uint useCount;
+ time_t addTime;
+ mutable time_t lastUsedTime;
+ pageID firstPage;
+};
+
+// Page table entry
+struct PageTableEntry {
+ // int so we can use values <0 for unassigned pages.
+ qint32 index;
+};
+
+// Each individual page contains the cached data. The first page starts off with
+// the utf8-encoded key, a null '\0', and then the data follows immediately
+// from the next byte, possibly crossing consecutive page boundaries to hold
+// all of the data.
+// There is, however, no specific struct for a page, it is simply a location in
+// memory.
+
+// This is effectively the layout of the shared memory segment. The variables
+// contained within form the header, data contained afterwards is pointed to
+// by using special accessor functions.
+struct SharedMemory {
+ /**
+ * Note to downstream packagers: This version flag is intended to be
+ * machine-specific. The KDE-provided source code will not set the lower
+ * two bits to allow for distribution-specific needs, with the exception
+ * of version 1 which was already defined in KDE Platform 4.5.
+ * e.g. the next version bump will be from 4 to 8, then 12, etc.
+ */
+ enum {
+ PIXMAP_CACHE_VERSION = 12,
+ MINIMUM_CACHE_SIZE = 4096,
+ };
+
+ // Note to those who follow me. You should not, under any circumstances, ever
+ // re-arrange the following two fields, even if you change the version number
+ // for later revisions of this code.
+ QAtomicInt ready; ///< DO NOT INITIALIZE
+ quint8 version;
+
+ // See kshareddatacache_p.h
+ SharedLock shmLock;
+
+ uint cacheSize;
+ uint cacheAvail;
+ QAtomicInt evictionPolicy;
+
+ // pageSize and cacheSize determine the number of pages. The number of
+ // pages determine the page table size and (indirectly) the index table
+ // size.
+ QAtomicInt pageSize;
+
+ // This variable is added to reserve space for later cache timestamping
+ // support. The idea is this variable will be updated when the cache is
+ // written to, to allow clients to detect a changed cache quickly.
+ QAtomicInt cacheTimestamp;
+
+ /**
+ * Converts the given average item size into an appropriate page size.
+ */
+ static unsigned equivalentPageSize(unsigned itemSize)
+ {
+ if (itemSize == 0) {
+ return 4096; // Default average item size.
+ }
+
+ int log2OfSize = 0;
+ while ((itemSize >>= 1) != 0) {
+ log2OfSize++;
+ }
+
+ // Bound page size between 512 bytes and 256 KiB.
+ // If this is adjusted, also alter validSizeMask in cachePageSize
+ log2OfSize = qBound(9, log2OfSize, 18);
+
+ return (1 << log2OfSize);
+ }
+
+ // Returns pageSize in unsigned format.
+ unsigned cachePageSize() const
+ {
+ unsigned _pageSize = static_cast<unsigned>(pageSize.loadRelaxed());
+ // bits 9-18 may be set.
+ static const unsigned validSizeMask = 0x7FE00u;
+
+ // Check for page sizes that are not a power-of-2, or are too low/high.
+ if (Q_UNLIKELY(countSetBits(_pageSize) != 1 || (_pageSize & ~validSizeMask))) {
+ throw KSDCCorrupted();
+ }
+
+ return _pageSize;
+ }
+
+ /**
+ * This is effectively the class ctor. But since we're in shared memory,
+ * there's a few rules:
+ *
+ * 1. To allow for some form of locking in the initial-setup case, we
+ * use an atomic int, which will be initialized to 0 by mmap(). Then to
+ * take the lock we atomically increment the 0 to 1. If we end up calling
+ * the QAtomicInt constructor we can mess that up, so we can't use a
+ * constructor for this class either.
+ * 2. Any member variable you add takes up space in shared memory as well,
+ * so make sure you need it.
+ */
+ bool performInitialSetup(uint _cacheSize, uint _pageSize)
+ {
+ if (_cacheSize < MINIMUM_CACHE_SIZE) {
+ qCCritical(KCOREADDONS_DEBUG) << "Internal error: Attempted to create a cache sized < " << MINIMUM_CACHE_SIZE;
+ return false;
+ }
+
+ if (_pageSize == 0) {
+ qCCritical(KCOREADDONS_DEBUG) << "Internal error: Attempted to create a cache with 0-sized pages.";
+ return false;
+ }
+
+ shmLock.type = findBestSharedLock();
+ if (shmLock.type == LOCKTYPE_INVALID) {
+ qCCritical(KCOREADDONS_DEBUG) << "Unable to find an appropriate lock to guard the shared cache. "
+ << "This *should* be essentially impossible. :(";
+ return false;
+ }
+
+ bool isProcessShared = false;
+ QSharedPointer<KSDCLock> tempLock(createLockFromId(shmLock.type, shmLock));
+
+ if (!tempLock->initialize(isProcessShared)) {
+ qCCritical(KCOREADDONS_DEBUG) << "Unable to initialize the lock for the cache!";
+ return false;
+ }
+
+ if (!isProcessShared) {
+ qCWarning(KCOREADDONS_DEBUG) << "Cache initialized, but does not support being"
+ << "shared across processes.";
+ }
+
+ // These must be updated to make some of our auxiliary functions
+ // work right since their values will be based on the cache size.
+ cacheSize = _cacheSize;
+ pageSize = _pageSize;
+ version = PIXMAP_CACHE_VERSION;
+ cacheTimestamp = static_cast<unsigned>(::time(nullptr));
+
+ clearInternalTables();
+
+ // Unlock the mini-lock, and introduce a total memory barrier to make
+ // sure all changes have propagated even without a mutex.
+ ready.ref();
+
+ return true;
+ }
+
+ void clearInternalTables()
+ {
+ // Assumes we're already locked somehow.
+ cacheAvail = pageTableSize();
+
+ // Setup page tables to point nowhere
+ PageTableEntry *table = pageTable();
+ for (uint i = 0; i < pageTableSize(); ++i) {
+ table[i].index = -1;
+ }
+
+ // Setup index tables to be accurate.
+ IndexTableEntry *indices = indexTable();
+ for (uint i = 0; i < indexTableSize(); ++i) {
+ indices[i].firstPage = -1;
+ indices[i].useCount = 0;
+ indices[i].fileNameHash = 0;
+ indices[i].totalItemSize = 0;
+ indices[i].addTime = 0;
+ indices[i].lastUsedTime = 0;
+ }
+ }
+
+ const IndexTableEntry *indexTable() const
+ {
+ // Index Table goes immediately after this struct, at the first byte
+ // where alignment constraints are met (accounted for by offsetAs).
+ return offsetAs<IndexTableEntry>(this, sizeof(*this));
+ }
+
+ const PageTableEntry *pageTable() const
+ {
+ const IndexTableEntry *base = indexTable();
+ base += indexTableSize();
+
+ // Let's call wherever we end up the start of the page table...
+ return alignTo<PageTableEntry>(base);
+ }
+
+ const void *cachePages() const
+ {
+ const PageTableEntry *tableStart = pageTable();
+ tableStart += pageTableSize();
+
+ // Let's call wherever we end up the start of the data...
+ return alignTo<void>(tableStart, cachePageSize());
+ }
+
+ const void *page(pageID at) const
+ {
+ if (static_cast<uint>(at) >= pageTableSize()) {
+ return nullptr;
+ }
+
+ // We must manually calculate this one since pageSize varies.
+ const char *pageStart = reinterpret_cast<const char *>(cachePages());
+ pageStart += (at * cachePageSize());
+
+ return reinterpret_cast<const void *>(pageStart);
+ }
+
+ // The following are non-const versions of some of the methods defined
+ // above. They use const_cast<> because I feel that is better than
+ // duplicating the code. I suppose template member functions (?)
+ // may work, may investigate later.
+ IndexTableEntry *indexTable()
+ {
+ const SharedMemory *that = const_cast<const SharedMemory *>(this);
+ return const_cast<IndexTableEntry *>(that->indexTable());
+ }
+
+ PageTableEntry *pageTable()
+ {
+ const SharedMemory *that = const_cast<const SharedMemory *>(this);
+ return const_cast<PageTableEntry *>(that->pageTable());
+ }
+
+ void *cachePages()
+ {
+ const SharedMemory *that = const_cast<const SharedMemory *>(this);
+ return const_cast<void *>(that->cachePages());
+ }
+
+ void *page(pageID at)
+ {
+ const SharedMemory *that = const_cast<const SharedMemory *>(this);
+ return const_cast<void *>(that->page(at));
+ }
+
+ uint pageTableSize() const
+ {
+ return cacheSize / cachePageSize();
+ }
+
+ uint indexTableSize() const
+ {
+ // Assume 2 pages on average are needed -> the number of entries
+ // would be half of the number of pages.
+ return pageTableSize() / 2;
+ }
+
+ /**
+ * @return the index of the first page, for the set of contiguous
+ * pages that can hold @p pagesNeeded PAGES.
+ */
+ pageID findEmptyPages(uint pagesNeeded) const
+ {
+ if (Q_UNLIKELY(pagesNeeded > pageTableSize())) {
+ return pageTableSize();
+ }
+
+ // Loop through the page table, find the first empty page, and just
+ // makes sure that there are enough free pages.
+ const PageTableEntry *table = pageTable();
+ uint contiguousPagesFound = 0;
+ pageID base = 0;
+ for (pageID i = 0; i < static_cast<int>(pageTableSize()); ++i) {
+ if (table[i].index < 0) {
+ if (contiguousPagesFound == 0) {
+ base = i;
+ }
+ contiguousPagesFound++;
+ } else {
+ contiguousPagesFound = 0;
+ }
+
+ if (contiguousPagesFound == pagesNeeded) {
+ return base;
+ }
+ }
+
+ return pageTableSize();
+ }
+
+ // left < right?
+ static bool lruCompare(const IndexTableEntry &l, const IndexTableEntry &r)
+ {
+ // Ensure invalid entries migrate to the end
+ if (l.firstPage < 0 && r.firstPage >= 0) {
+ return false;
+ }
+ if (l.firstPage >= 0 && r.firstPage < 0) {
+ return true;
+ }
+
+ // Most recently used will have the highest absolute time =>
+ // least recently used (lowest) should go first => use left < right
+ return l.lastUsedTime < r.lastUsedTime;
+ }
+
+ // left < right?
+ static bool seldomUsedCompare(const IndexTableEntry &l, const IndexTableEntry &r)
+ {
+ // Ensure invalid entries migrate to the end
+ if (l.firstPage < 0 && r.firstPage >= 0) {
+ return false;
+ }
+ if (l.firstPage >= 0 && r.firstPage < 0) {
+ return true;
+ }
+
+ // Put lowest use count at start by using left < right
+ return l.useCount < r.useCount;
+ }
+
+ // left < right?
+ static bool ageCompare(const IndexTableEntry &l, const IndexTableEntry &r)
+ {
+ // Ensure invalid entries migrate to the end
+ if (l.firstPage < 0 && r.firstPage >= 0) {
+ return false;
+ }
+ if (l.firstPage >= 0 && r.firstPage < 0) {
+ return true;
+ }
+
+ // Oldest entries die first -- they have the lowest absolute add time,
+ // so just like the others use left < right
+ return l.addTime < r.addTime;
+ }
+
+ void defragment()
+ {
+ if (cacheAvail * cachePageSize() == cacheSize) {
+ return; // That was easy
+ }
+
+ qCDebug(KCOREADDONS_DEBUG) << "Defragmenting the shared cache";
+
+ // Just do a linear scan, and anytime there is free space, swap it
+ // with the pages to its right. In order to meet the precondition
+ // we need to skip any used pages first.
+
+ pageID currentPage = 0;
+ pageID idLimit = static_cast<pageID>(pageTableSize());
+ PageTableEntry *pages = pageTable();
+
+ if (Q_UNLIKELY(!pages || idLimit <= 0)) {
+ throw KSDCCorrupted();
+ }
+
+ // Skip used pages
+ while (currentPage < idLimit && pages[currentPage].index >= 0) {
+ ++currentPage;
+ }
+
+ pageID freeSpot = currentPage;
+
+ // Main loop, starting from a free page, skip to the used pages and
+ // move them back.
+ while (currentPage < idLimit) {
+ // Find the next used page
+ while (currentPage < idLimit && pages[currentPage].index < 0) {
+ ++currentPage;
+ }
+
+ if (currentPage >= idLimit) {
+ break;
+ }
+
+ // Found an entry, move it.
+ qint32 affectedIndex = pages[currentPage].index;
+ if (Q_UNLIKELY(affectedIndex < 0 || affectedIndex >= idLimit || indexTable()[affectedIndex].firstPage != currentPage)) {
+ throw KSDCCorrupted();
+ }
+
+ indexTable()[affectedIndex].firstPage = freeSpot;
+
+ // Moving one page at a time guarantees we can use memcpy safely
+ // (in other words, the source and destination will not overlap).
+ while (currentPage < idLimit && pages[currentPage].index >= 0) {
+ const void *const sourcePage = page(currentPage);
+ void *const destinationPage = page(freeSpot);
+
+ // We always move used pages into previously-found empty spots,
+ // so check ordering as well for logic errors.
+ if (Q_UNLIKELY(!sourcePage || !destinationPage || sourcePage < destinationPage)) {
+ throw KSDCCorrupted();
+ }
+
+ ::memcpy(destinationPage, sourcePage, cachePageSize());
+ pages[freeSpot].index = affectedIndex;
+ pages[currentPage].index = -1;
+ ++currentPage;
+ ++freeSpot;
+
+ // If we've just moved the very last page and it happened to
+ // be at the very end of the cache then we're done.
+ if (currentPage >= idLimit) {
+ break;
+ }
+
+ // We're moving consecutive used pages whether they belong to
+ // our affected entry or not, so detect if we've started moving
+ // the data for a different entry and adjust if necessary.
+ if (affectedIndex != pages[currentPage].index) {
+ indexTable()[pages[currentPage].index].firstPage = freeSpot;
+ }
+ affectedIndex = pages[currentPage].index;
+ }
+
+ // At this point currentPage is on a page that is unused, and the
+ // cycle repeats. However, currentPage is not the first unused
+ // page, freeSpot is, so leave it alone.
+ }
+ }
+
+ /**
+ * Finds the index entry for a given key.
+ * @param key UTF-8 encoded key to search for.
+ * @return The index of the entry in the cache named by @p key. Returns
+ * <0 if no such entry is present.
+ */
+ qint32 findNamedEntry(const QByteArray &key) const
+ {
+ uint keyHash = generateHash(key);
+ uint position = keyHash % indexTableSize();
+ uint probeNumber = 1; // See insert() for description
+
+ // Imagine 3 entries A, B, C in this logical probing chain. If B is
+ // later removed then we can't find C either. So, we must keep
+ // searching for probeNumber number of tries (or we find the item,
+ // obviously).
+ while (indexTable()[position].fileNameHash != keyHash && probeNumber < MAX_PROBE_COUNT) {
+ position = (keyHash + (probeNumber + probeNumber * probeNumber) / 2) % indexTableSize();
+ probeNumber++;
+ }
+
+ if (indexTable()[position].fileNameHash == keyHash) {
+ pageID firstPage = indexTable()[position].firstPage;
+ if (firstPage < 0 || static_cast<uint>(firstPage) >= pageTableSize()) {
+ return -1;
+ }
+
+ const void *resultPage = page(firstPage);
+ if (Q_UNLIKELY(!resultPage)) {
+ throw KSDCCorrupted();
+ }
+
+ const char *utf8FileName = reinterpret_cast<const char *>(resultPage);
+ if (qstrncmp(utf8FileName, key.constData(), cachePageSize()) == 0) {
+ return position;
+ }
+ }
+
+ return -1; // Not found, or a different one found.
+ }
+
+ // Function to use with QSharedPointer in removeUsedPages below...
+ static void deleteTable(IndexTableEntry *table)
+ {
+ delete[] table;
+ }
+
+ /**
+ * Removes the requested number of pages.
+ *
+ * @param numberNeeded the number of pages required to fulfill a current request.
+ * This number should be <0 and <= the number of pages in the cache.
+ * @return The identifier of the beginning of a consecutive block of pages able
+ * to fill the request. Returns a value >= pageTableSize() if no such
+ * request can be filled.
+ * @internal
+ */
+ uint removeUsedPages(uint numberNeeded)
+ {
+ if (numberNeeded == 0) {
+ qCCritical(KCOREADDONS_DEBUG) << "Internal error: Asked to remove exactly 0 pages for some reason.";
+ throw KSDCCorrupted();
+ }
+
+ if (numberNeeded > pageTableSize()) {
+ qCCritical(KCOREADDONS_DEBUG) << "Internal error: Requested more space than exists in the cache.";
+ qCCritical(KCOREADDONS_DEBUG) << numberNeeded << "requested, " << pageTableSize() << "is the total possible.";
+ throw KSDCCorrupted();
+ }
+
+ // If the cache free space is large enough we will defragment first
+ // instead since it's likely we're highly fragmented.
+ // Otherwise, we will (eventually) simply remove entries per the
+ // eviction order set for the cache until there is enough room
+ // available to hold the number of pages we need.
+
+ qCDebug(KCOREADDONS_DEBUG) << "Removing old entries to free up" << numberNeeded << "pages," << cacheAvail << "are already theoretically available.";
+
+ if (cacheAvail > 3 * numberNeeded) {
+ defragment();
+ uint result = findEmptyPages(numberNeeded);
+
+ if (result < pageTableSize()) {
+ return result;
+ } else {
+ qCCritical(KCOREADDONS_DEBUG) << "Just defragmented a locked cache, but still there"
+ << "isn't enough room for the current request.";
+ }
+ }
+
+ // At this point we know we'll have to free some space up, so sort our
+ // list of entries by whatever the current criteria are and start
+ // killing expired entries.
+ QSharedPointer<IndexTableEntry> tablePtr(new IndexTableEntry[indexTableSize()], deleteTable);
+
+ if (!tablePtr) {
+ qCCritical(KCOREADDONS_DEBUG) << "Unable to allocate temporary memory for sorting the cache!";
+ clearInternalTables();
+ throw KSDCCorrupted();
+ }
+
+ // We use tablePtr to ensure the data is destroyed, but do the access
+ // via a helper pointer to allow for array ops.
+ IndexTableEntry *table = tablePtr.data();
+
+ ::memcpy(table, indexTable(), sizeof(IndexTableEntry) * indexTableSize());
+
+ // Our entry ID is simply its index into the
+ // index table, which qSort will rearrange all willy-nilly, so first
+ // we'll save the *real* entry ID into firstPage (which is useless in
+ // our copy of the index table). On the other hand if the entry is not
+ // used then we note that with -1.
+ for (uint i = 0; i < indexTableSize(); ++i) {
+ table[i].firstPage = table[i].useCount > 0 ? static_cast<pageID>(i) : -1;
+ }
+
+ // Declare the comparison function that we'll use to pass to qSort,
+ // based on our cache eviction policy.
+ bool (*compareFunction)(const IndexTableEntry &, const IndexTableEntry &);
+ switch (evictionPolicy.loadRelaxed()) {
+ case KSharedDataCache::EvictLeastOftenUsed:
+ case KSharedDataCache::NoEvictionPreference:
+ default:
+ compareFunction = seldomUsedCompare;
+ break;
+
+ case KSharedDataCache::EvictLeastRecentlyUsed:
+ compareFunction = lruCompare;
+ break;
+
+ case KSharedDataCache::EvictOldest:
+ compareFunction = ageCompare;
+ break;
+ }
+
+ std::sort(table, table + indexTableSize(), compareFunction);
+
+ // Least recently used entries will be in the front.
+ // Start killing until we have room.
+
+ // Note on removeEntry: It expects an index into the index table,
+ // but our sorted list is all jumbled. But we stored the real index
+ // in the firstPage member.
+ // Remove entries until we've removed at least the required number
+ // of pages.
+ uint i = 0;
+ while (i < indexTableSize() && numberNeeded > cacheAvail) {
+ int curIndex = table[i++].firstPage; // Really an index, not a page
+
+ // Removed everything, still no luck (or curIndex is set but too high).
+ if (curIndex < 0 || static_cast<uint>(curIndex) >= indexTableSize()) {
+ qCCritical(KCOREADDONS_DEBUG) << "Trying to remove index" << curIndex << "out-of-bounds for index table of size" << indexTableSize();
+ throw KSDCCorrupted();
+ }
+
+ qCDebug(KCOREADDONS_DEBUG) << "Removing entry of" << indexTable()[curIndex].totalItemSize << "size";
+ removeEntry(curIndex);
+ }
+
+ // At this point let's see if we have freed up enough data by
+ // defragmenting first and seeing if we can find that free space.
+ defragment();
+
+ pageID result = pageTableSize();
+ while (i < indexTableSize() && (static_cast<uint>(result = findEmptyPages(numberNeeded))) >= pageTableSize()) {
+ int curIndex = table[i++].firstPage;
+
+ if (curIndex < 0) {
+ // One last shot.
+ defragment();
+ return findEmptyPages(numberNeeded);
+ }
+
+ if (Q_UNLIKELY(static_cast<uint>(curIndex) >= indexTableSize())) {
+ throw KSDCCorrupted();
+ }
+
+ removeEntry(curIndex);
+ }
+
+ // Whew.
+ return result;
+ }
+
+ // Returns the total size required for a given cache size.
+ static uint totalSize(uint cacheSize, uint effectivePageSize)
+ {
+ uint numberPages = intCeil(cacheSize, effectivePageSize);
+ uint indexTableSize = numberPages / 2;
+
+ // Knowing the number of pages, we can determine what addresses we'd be
+ // using (properly aligned), and from there determine how much memory
+ // we'd use.
+ IndexTableEntry *indexTableStart = offsetAs<IndexTableEntry>(static_cast<void *>(nullptr), sizeof(SharedMemory));
+
+ indexTableStart += indexTableSize;
+
+ PageTableEntry *pageTableStart = reinterpret_cast<PageTableEntry *>(indexTableStart);
+ pageTableStart = alignTo<PageTableEntry>(pageTableStart);
+ pageTableStart += numberPages;
+
+ // The weird part, we must manually adjust the pointer based on the page size.
+ char *cacheStart = reinterpret_cast<char *>(pageTableStart);
+ cacheStart += (numberPages * effectivePageSize);
+
+ // ALIGNOF gives pointer alignment
+ cacheStart = alignTo<char>(cacheStart, ALIGNOF(void *));
+
+ // We've traversed the header, index, page table, and cache.
+ // Wherever we're at now is the size of the enchilada.
+ return static_cast<uint>(reinterpret_cast<quintptr>(cacheStart));
+ }
+
+ uint fileNameHash(const QByteArray &utf8FileName) const
+ {
+ return generateHash(utf8FileName) % indexTableSize();
+ }
+
+ void clear()
+ {
+ clearInternalTables();
+ }
+
+ void removeEntry(uint index);
+};
+
+// The per-instance private data, such as map size, whether
+// attached or not, pointer to shared memory, etc.
+class Q_DECL_HIDDEN KSharedDataCache::Private
+{
+public:
+ Private(const QString &name, unsigned defaultCacheSize, unsigned expectedItemSize)
+ : m_cacheName(name)
+ , shm(nullptr)
+ , m_lock()
+ , m_mapSize(0)
+ , m_defaultCacheSize(defaultCacheSize)
+ , m_expectedItemSize(expectedItemSize)
+ , m_expectedType(LOCKTYPE_INVALID)
+ {
+ mapSharedMemory();
+ }
+
+ // Put the cache in a condition to be able to call mapSharedMemory() by
+ // completely detaching from shared memory (such as to respond to an
+ // unrecoverable error).
+ // m_mapSize must already be set to the amount of memory mapped to shm.
+ void detachFromSharedMemory()
+ {
+ // The lock holds a reference into shared memory, so this must be
+ // cleared before shm is removed.
+ m_lock.clear();
+
+ if (shm && 0 != ::munmap(shm, m_mapSize)) {
+ qCCritical(KCOREADDONS_DEBUG) << "Unable to unmap shared memory segment" << static_cast<void *>(shm) << ":" << ::strerror(errno);
+ }
+
+ shm = nullptr;
+ m_mapSize = 0;
+ }
+
+ // This function does a lot of the important work, attempting to connect to shared
+ // memory, a private anonymous mapping if that fails, and failing that, nothing (but
+ // the cache remains "valid", we just don't actually do anything).
+ void mapSharedMemory()
+ {
+ // 0-sized caches are fairly useless.
+ unsigned cacheSize = qMax(m_defaultCacheSize, uint(SharedMemory::MINIMUM_CACHE_SIZE));
+ unsigned pageSize = SharedMemory::equivalentPageSize(m_expectedItemSize);
+
+ // Ensure that the cache is sized such that there is a minimum number of
+ // pages available. (i.e. a cache consisting of only 1 page is fairly
+ // useless and probably crash-prone).
+ cacheSize = qMax(pageSize * 256, cacheSize);
+
+ // The m_cacheName is used to find the file to store the cache in.
+ const QString cacheDir = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation);
+ QString cacheName = cacheDir + QLatin1String("/") + m_cacheName + QLatin1String(".kcache");
+ QFile file(cacheName);
+ QFileInfo fileInfo(file);
+ if (!QDir().mkpath(fileInfo.absolutePath())) {
+ return;
+ }
+
+ // The basic idea is to open the file that we want to map into shared
+ // memory, and then actually establish the mapping. Once we have mapped the
+ // file into shared memory we can close the file handle, the mapping will
+ // still be maintained (unless the file is resized to be shorter than
+ // expected, which we don't handle yet :-( )
+
+ // size accounts for the overhead over the desired cacheSize
+ uint size = SharedMemory::totalSize(cacheSize, pageSize);
+ void *mapAddress = MAP_FAILED;
+
+ if (size < cacheSize) {
+ qCCritical(KCOREADDONS_DEBUG) << "Asked for a cache size less than requested size somehow -- Logic Error :(";
+ return;
+ }
+
+ // We establish the shared memory mapping here, only if we will have appropriate
+ // mutex support (systemSupportsProcessSharing), then we:
+ // Open the file and resize to some sane value if the file is too small.
+ if (file.open(QIODevice::ReadWrite) && (file.size() >= size || (file.resize(size) && ensureFileAllocated(file.handle(), size)))) {
+ // Use mmap directly instead of QFile::map since the QFile (and its
+ // shared mapping) will disappear unless we hang onto the QFile for no
+ // reason (see the note below, we don't care about the file per se...)
+ mapAddress = QT_MMAP(nullptr, size, PROT_READ | PROT_WRITE, MAP_SHARED, file.handle(), 0);
+
+ // So... it is possible that someone else has mapped this cache already
+ // with a larger size. If that's the case we need to at least match
+ // the size to be able to access every entry, so fixup the mapping.
+ if (mapAddress != MAP_FAILED) {
+ SharedMemory *mapped = reinterpret_cast<SharedMemory *>(mapAddress);
+
+ // First make sure that the version of the cache on disk is
+ // valid. We also need to check that version != 0 to
+ // disambiguate against an uninitialized cache.
+ if (mapped->version != SharedMemory::PIXMAP_CACHE_VERSION && mapped->version > 0) {
+ qCWarning(KCOREADDONS_DEBUG) << "Deleting wrong version of cache" << cacheName;
+
+ // CAUTION: Potentially recursive since the recovery
+ // involves calling this function again.
+ m_mapSize = size;
+ shm = mapped;
+ recoverCorruptedCache();
+ return;
+ } else if (mapped->cacheSize > cacheSize) {
+ // This order is very important. We must save the cache size
+ // before we remove the mapping, but unmap before overwriting
+ // the previous mapping size...
+ cacheSize = mapped->cacheSize;
+ unsigned actualPageSize = mapped->cachePageSize();
+ ::munmap(mapAddress, size);
+ size = SharedMemory::totalSize(cacheSize, actualPageSize);
+ mapAddress = QT_MMAP(nullptr, size, PROT_READ | PROT_WRITE, MAP_SHARED, file.handle(), 0);
+ }
+ }
+ }
+
+ // We could be here without the mapping established if:
+ // 1) Process-shared synchronization is not supported, either at compile or run time,
+ // 2) Unable to open the required file.
+ // 3) Unable to resize the file to be large enough.
+ // 4) Establishing the mapping failed.
+ // 5) The mapping succeeded, but the size was wrong and we were unable to map when
+ // we tried again.
+ // 6) The incorrect version of the cache was detected.
+ // 7) The file could be created, but posix_fallocate failed to commit it fully to disk.
+ // In any of these cases, attempt to fallback to the
+ // better-supported anonymous private page style of mmap. This memory won't
+ // be shared, but our code will still work the same.
+ // NOTE: We never use the on-disk representation independently of the
+ // shared memory. If we don't get shared memory the disk info is ignored,
+ // if we do get shared memory we never look at disk again.
+ if (mapAddress == MAP_FAILED) {
+ qCWarning(KCOREADDONS_DEBUG) << "Failed to establish shared memory mapping, will fallback"
+ << "to private memory -- memory usage will increase";
+
+ mapAddress = QT_MMAP(nullptr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ }
+
+ // Well now we're really hosed. We can still work, but we can't even cache
+ // data.
+ if (mapAddress == MAP_FAILED) {
+ qCCritical(KCOREADDONS_DEBUG) << "Unable to allocate shared memory segment for shared data cache" << cacheName << "of size" << cacheSize;
+ return;
+ }
+
+ m_mapSize = size;
+
+ // We never actually construct shm, but we assign it the same address as the
+ // shared memory we just mapped, so effectively shm is now a SharedMemory that
+ // happens to be located at mapAddress.
+ shm = reinterpret_cast<SharedMemory *>(mapAddress);
+
+ // If we were first to create this memory map, all data will be 0.
+ // Therefore if ready == 0 we're not initialized. A fully initialized
+ // header will have ready == 2. Why?
+ // Because 0 means "safe to initialize"
+ // 1 means "in progress of initing"
+ // 2 means "ready"
+ uint usecSleepTime = 8; // Start by sleeping for 8 microseconds
+ while (shm->ready.loadRelaxed() != 2) {
+ if (Q_UNLIKELY(usecSleepTime >= (1 << 21))) {
+ // Didn't acquire within ~8 seconds? Assume an issue exists
+ qCCritical(KCOREADDONS_DEBUG) << "Unable to acquire shared lock, is the cache corrupt?";
+
+ file.remove(); // Unlink the cache in case it's corrupt.
+ detachFromSharedMemory();
+ return; // Fallback to QCache (later)
+ }
+
+ if (shm->ready.testAndSetAcquire(0, 1)) {
+ if (!shm->performInitialSetup(cacheSize, pageSize)) {
+ qCCritical(KCOREADDONS_DEBUG) << "Unable to perform initial setup, this system probably "
+ "does not really support process-shared pthreads or "
+ "semaphores, even though it claims otherwise.";
+
+ file.remove();
+ detachFromSharedMemory();
+ return;
+ }
+ } else {
+ usleep(usecSleepTime); // spin
+
+ // Exponential fallback as in Ethernet and similar collision resolution methods
+ usecSleepTime *= 2;
+ }
+ }
+
+ m_expectedType = shm->shmLock.type;
+ m_lock = QSharedPointer<KSDCLock>(createLockFromId(m_expectedType, shm->shmLock));
+ bool isProcessSharingSupported = false;
+
+ if (!m_lock->initialize(isProcessSharingSupported)) {
+ qCCritical(KCOREADDONS_DEBUG) << "Unable to setup shared cache lock, although it worked when created.";
+ detachFromSharedMemory();
+ }
+ }
+
+ // Called whenever the cache is apparently corrupt (for instance, a timeout trying to
+ // lock the cache). In this situation it is safer just to destroy it all and try again.
+ void recoverCorruptedCache()
+ {
+ KSharedDataCache::deleteCache(m_cacheName);
+
+ detachFromSharedMemory();
+
+ // Do this even if we weren't previously cached -- it might work now.
+ mapSharedMemory();
+ }
+
+ // This should be called for any memory access to shared memory. This
+ // function will verify that the bytes [base, base+accessLength) are
+ // actually mapped to d->shm. The cache itself may have incorrect cache
+ // page sizes, incorrect cache size, etc. so this function should be called
+ // despite the cache data indicating it should be safe.
+ //
+ // If the access is /not/ safe then a KSDCCorrupted exception will be
+ // thrown, so be ready to catch that.
+ void verifyProposedMemoryAccess(const void *base, unsigned accessLength) const
+ {
+ quintptr startOfAccess = reinterpret_cast<quintptr>(base);
+ quintptr startOfShm = reinterpret_cast<quintptr>(shm);
+
+ if (Q_UNLIKELY(startOfAccess < startOfShm)) {
+ throw KSDCCorrupted();
+ }
+
+ quintptr endOfShm = startOfShm + m_mapSize;
+ quintptr endOfAccess = startOfAccess + accessLength;
+
+ // Check for unsigned integer wraparound, and then
+ // bounds access
+ if (Q_UNLIKELY((endOfShm < startOfShm) || (endOfAccess < startOfAccess) || (endOfAccess > endOfShm))) {
+ throw KSDCCorrupted();
+ }
+ }
+
+ bool lock() const
+ {
+ if (Q_LIKELY(shm && shm->shmLock.type == m_expectedType)) {
+ return m_lock->lock();
+ }
+
+ // No shm or wrong type --> corrupt!
+ throw KSDCCorrupted();
+ }
+
+ void unlock() const
+ {
+ m_lock->unlock();
+ }
+
+ class CacheLocker
+ {
+ mutable Private *d;
+
+ bool cautiousLock()
+ {
+ int lockCount = 0;
+
+ // Locking can fail due to a timeout. If it happens too often even though
+ // we're taking corrective action assume there's some disastrous problem
+ // and give up.
+ while (!d->lock() && !isLockedCacheSafe()) {
+ d->recoverCorruptedCache();
+
+ if (!d->shm) {
+ qCWarning(KCOREADDONS_DEBUG) << "Lost the connection to shared memory for cache" << d->m_cacheName;
+ return false;
+ }
+
+ if (lockCount++ > 4) {
+ qCCritical(KCOREADDONS_DEBUG) << "There is a very serious problem with the KDE data cache" << d->m_cacheName
+ << "giving up trying to access cache.";
+ d->detachFromSharedMemory();
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ // Runs a quick battery of tests on an already-locked cache and returns
+ // false as soon as a sanity check fails. The cache remains locked in this
+ // situation.
+ bool isLockedCacheSafe() const
+ {
+ // Note that cachePageSize() itself runs a check that can throw.
+ uint testSize = SharedMemory::totalSize(d->shm->cacheSize, d->shm->cachePageSize());
+
+ if (Q_UNLIKELY(d->m_mapSize != testSize)) {
+ return false;
+ }
+ if (Q_UNLIKELY(d->shm->version != SharedMemory::PIXMAP_CACHE_VERSION)) {
+ return false;
+ }
+ switch (d->shm->evictionPolicy.loadRelaxed()) {
+ case NoEvictionPreference: // fallthrough
+ case EvictLeastRecentlyUsed: // fallthrough
+ case EvictLeastOftenUsed: // fallthrough
+ case EvictOldest:
+ break;
+ default:
+ return false;
+ }
+
+ return true;
+ }
+
+ public:
+ CacheLocker(const Private *_d)
+ : d(const_cast<Private *>(_d))
+ {
+ if (Q_UNLIKELY(!d || !d->shm || !cautiousLock())) {
+ d = nullptr;
+ }
+ }
+
+ ~CacheLocker()
+ {
+ if (d && d->shm) {
+ d->unlock();
+ }
+ }
+
+ CacheLocker(const CacheLocker &) = delete;
+ CacheLocker &operator=(const CacheLocker &) = delete;
+
+ bool failed() const
+ {
+ return !d || d->shm == nullptr;
+ }
+ };
+
+ QString m_cacheName;
+ SharedMemory *shm;
+ QSharedPointer<KSDCLock> m_lock;
+ uint m_mapSize;
+ uint m_defaultCacheSize;
+ uint m_expectedItemSize;
+ SharedLockId m_expectedType;
+};
+
+// Must be called while the lock is already held!
+void SharedMemory::removeEntry(uint index)
+{
+ if (index >= indexTableSize() || cacheAvail > pageTableSize()) {
+ throw KSDCCorrupted();
+ }
+
+ PageTableEntry *pageTableEntries = pageTable();
+ IndexTableEntry *entriesIndex = indexTable();
+
+ // Update page table first
+ pageID firstPage = entriesIndex[index].firstPage;
+ if (firstPage < 0 || static_cast<quint32>(firstPage) >= pageTableSize()) {
+ qCDebug(KCOREADDONS_DEBUG) << "Trying to remove an entry which is already invalid. This "
+ << "cache is likely corrupt.";
+ throw KSDCCorrupted();
+ }
+
+ if (index != static_cast<uint>(pageTableEntries[firstPage].index)) {
+ qCCritical(KCOREADDONS_DEBUG) << "Removing entry" << index << "but the matching data"
+ << "doesn't link back -- cache is corrupt, clearing.";
+ throw KSDCCorrupted();
+ }
+
+ uint entriesToRemove = intCeil(entriesIndex[index].totalItemSize, cachePageSize());
+ uint savedCacheSize = cacheAvail;
+ for (uint i = firstPage; i < pageTableSize() && static_cast<uint>(pageTableEntries[i].index) == index; ++i) {
+ pageTableEntries[i].index = -1;
+ cacheAvail++;
+ }
+
+ if ((cacheAvail - savedCacheSize) != entriesToRemove) {
+ qCCritical(KCOREADDONS_DEBUG) << "We somehow did not remove" << entriesToRemove << "when removing entry" << index << ", instead we removed"
+ << (cacheAvail - savedCacheSize);
+ throw KSDCCorrupted();
+ }
+
+ // For debugging
+#ifdef NDEBUG
+ void *const startOfData = page(firstPage);
+ if (startOfData) {
+ QByteArray str((const char *)startOfData);
+ str.prepend(" REMOVED: ");
+ str.prepend(QByteArray::number(index));
+ str.prepend("ENTRY ");
+
+ ::memcpy(startOfData, str.constData(), str.size() + 1);
+ }
+#endif
+
+ // Update the index
+ entriesIndex[index].fileNameHash = 0;
+ entriesIndex[index].totalItemSize = 0;
+ entriesIndex[index].useCount = 0;
+ entriesIndex[index].lastUsedTime = 0;
+ entriesIndex[index].addTime = 0;
+ entriesIndex[index].firstPage = -1;
+}
+
+KSharedDataCache::KSharedDataCache(const QString &cacheName, unsigned defaultCacheSize, unsigned expectedItemSize)
+ : d(nullptr)
+{
+ try {
+ d = new Private(cacheName, defaultCacheSize, expectedItemSize);
+ } catch (KSDCCorrupted) {
+ KSharedDataCache::deleteCache(cacheName);
+
+ // Try only once more
+ try {
+ d = new Private(cacheName, defaultCacheSize, expectedItemSize);
+ } catch (KSDCCorrupted) {
+ qCCritical(KCOREADDONS_DEBUG) << "Even a brand-new cache starts off corrupted, something is"
+ << "seriously wrong. :-(";
+ d = nullptr; // Just in case
+ }
+ }
+}
+
+KSharedDataCache::~KSharedDataCache()
+{
+ // Note that there is no other actions required to separate from the
+ // shared memory segment, simply unmapping is enough. This makes things
+ // *much* easier so I'd recommend maintaining this ideal.
+ if (!d) {
+ return;
+ }
+
+ if (d->shm) {
+#ifdef KSDC_MSYNC_SUPPORTED
+ ::msync(d->shm, d->m_mapSize, MS_INVALIDATE | MS_ASYNC);
+#endif
+ ::munmap(d->shm, d->m_mapSize);
+ }
+
+ // Do not delete d->shm, it was never constructed, it's just an alias.
+ d->shm = nullptr;
+
+ delete d;
+}
+
+bool KSharedDataCache::insert(const QString &key, const QByteArray &data)
+{
+ try {
+ Private::CacheLocker lock(d);
+ if (lock.failed()) {
+ return false;
+ }
+
+ QByteArray encodedKey = key.toUtf8();
+ uint keyHash = generateHash(encodedKey);
+ uint position = keyHash % d->shm->indexTableSize();
+
+ // See if we're overwriting an existing entry.
+ IndexTableEntry *indices = d->shm->indexTable();
+
+ // In order to avoid the issue of a very long-lived cache having items
+ // with a use count of 1 near-permanently, we attempt to artifically
+ // reduce the use count of long-lived items when there is high load on
+ // the cache. We do this randomly, with a weighting that makes the event
+ // impossible if load < 0.5, and guaranteed if load >= 0.96.
+ const static double startCullPoint = 0.5l;
+ const static double mustCullPoint = 0.96l;
+
+ // cacheAvail is in pages, cacheSize is in bytes.
+ double loadFactor = 1.0 - (1.0l * d->shm->cacheAvail * d->shm->cachePageSize() / d->shm->cacheSize);
+ bool cullCollisions = false;
+
+ if (Q_UNLIKELY(loadFactor >= mustCullPoint)) {
+ cullCollisions = true;
+ } else if (loadFactor > startCullPoint) {
+ const int tripWireValue = RAND_MAX * (loadFactor - startCullPoint) / (mustCullPoint - startCullPoint);
+ if (QRandomGenerator::global()->bounded(RAND_MAX) >= tripWireValue) {
+ cullCollisions = true;
+ }
+ }
+
+ // In case of collisions in the index table (i.e. identical positions), use
+ // quadratic chaining to attempt to find an empty slot. The equation we use
+ // is:
+ // position = (hash + (i + i*i) / 2) % size, where i is the probe number.
+ uint probeNumber = 1;
+ while (indices[position].useCount > 0 && probeNumber < MAX_PROBE_COUNT) {
+ // If we actually stumbled upon an old version of the key we are
+ // overwriting, then use that position, do not skip over it.
+
+ if (Q_UNLIKELY(indices[position].fileNameHash == keyHash)) {
+ break;
+ }
+
+ // If we are "culling" old entries, see if this one is old and if so
+ // reduce its use count. If it reduces to zero then eliminate it and
+ // use its old spot.
+
+ if (cullCollisions && (::time(nullptr) - indices[position].lastUsedTime) > 60) {
+ indices[position].useCount >>= 1;
+ if (indices[position].useCount == 0) {
+ qCDebug(KCOREADDONS_DEBUG) << "Overwriting existing old cached entry due to collision.";
+ d->shm->removeEntry(position); // Remove it first
+ break;
+ }
+ }
+
+ position = (keyHash + (probeNumber + probeNumber * probeNumber) / 2) % d->shm->indexTableSize();
+ probeNumber++;
+ }
+
+ if (indices[position].useCount > 0 && indices[position].firstPage >= 0) {
+ qCDebug(KCOREADDONS_DEBUG) << "Overwriting existing cached entry due to collision.";
+ d->shm->removeEntry(position); // Remove it first
+ }
+
+ // Data will be stored as fileNamefoo\0PNGimagedata.....
+ // So total size required is the length of the encoded file name + 1
+ // for the trailing null, and then the length of the image data.
+ uint fileNameLength = 1 + encodedKey.length();
+ uint requiredSize = fileNameLength + data.size();
+ uint pagesNeeded = intCeil(requiredSize, d->shm->cachePageSize());
+ uint firstPage(-1);
+
+ if (pagesNeeded >= d->shm->pageTableSize()) {
+ qCWarning(KCOREADDONS_DEBUG) << key << "is too large to be cached.";
+ return false;
+ }
+
+ // If the cache has no room, or the fragmentation is too great to find
+ // the required number of consecutive free pages, take action.
+ if (pagesNeeded > d->shm->cacheAvail || (firstPage = d->shm->findEmptyPages(pagesNeeded)) >= d->shm->pageTableSize()) {
+ // If we have enough free space just defragment
+ uint freePagesDesired = 3 * qMax(1u, pagesNeeded / 2);
+
+ if (d->shm->cacheAvail > freePagesDesired) {
+ // TODO: How the hell long does this actually take on real
+ // caches?
+ d->shm->defragment();
+ firstPage = d->shm->findEmptyPages(pagesNeeded);
+ } else {
+ // If we already have free pages we don't want to remove a ton
+ // extra. However we can't rely on the return value of
+ // removeUsedPages giving us a good location since we're not
+ // passing in the actual number of pages that we need.
+ d->shm->removeUsedPages(qMin(2 * freePagesDesired, d->shm->pageTableSize()) - d->shm->cacheAvail);
+ firstPage = d->shm->findEmptyPages(pagesNeeded);
+ }
+
+ if (firstPage >= d->shm->pageTableSize() || d->shm->cacheAvail < pagesNeeded) {
+ qCCritical(KCOREADDONS_DEBUG) << "Unable to free up memory for" << key;
+ return false;
+ }
+ }
+
+ // Update page table
+ PageTableEntry *table = d->shm->pageTable();
+ for (uint i = 0; i < pagesNeeded; ++i) {
+ table[firstPage + i].index = position;
+ }
+
+ // Update index
+ indices[position].fileNameHash = keyHash;
+ indices[position].totalItemSize = requiredSize;
+ indices[position].useCount = 1;
+ indices[position].addTime = ::time(nullptr);
+ indices[position].lastUsedTime = indices[position].addTime;
+ indices[position].firstPage = firstPage;
+
+ // Update cache
+ d->shm->cacheAvail -= pagesNeeded;
+
+ // Actually move the data in place
+ void *dataPage = d->shm->page(firstPage);
+ if (Q_UNLIKELY(!dataPage)) {
+ throw KSDCCorrupted();
+ }
+
+ // Verify it will all fit
+ d->verifyProposedMemoryAccess(dataPage, requiredSize);
+
+ // Cast for byte-sized pointer arithmetic
+ uchar *startOfPageData = reinterpret_cast<uchar *>(dataPage);
+ ::memcpy(startOfPageData, encodedKey.constData(), fileNameLength);
+ ::memcpy(startOfPageData + fileNameLength, data.constData(), data.size());
+
+ return true;
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ return false;
+ }
+}
+
+bool KSharedDataCache::find(const QString &key, QByteArray *destination) const
+{
+ try {
+ Private::CacheLocker lock(d);
+ if (lock.failed()) {
+ return false;
+ }
+
+ // Search in the index for our data, hashed by key;
+ QByteArray encodedKey = key.toUtf8();
+ qint32 entry = d->shm->findNamedEntry(encodedKey);
+
+ if (entry >= 0) {
+ const IndexTableEntry *header = &d->shm->indexTable()[entry];
+ const void *resultPage = d->shm->page(header->firstPage);
+ if (Q_UNLIKELY(!resultPage)) {
+ throw KSDCCorrupted();
+ }
+
+ d->verifyProposedMemoryAccess(resultPage, header->totalItemSize);
+
+ header->useCount++;
+ header->lastUsedTime = ::time(nullptr);
+
+ // Our item is the key followed immediately by the data, so skip
+ // past the key.
+ const char *cacheData = reinterpret_cast<const char *>(resultPage);
+ cacheData += encodedKey.size();
+ cacheData++; // Skip trailing null -- now we're pointing to start of data
+
+ if (destination) {
+ *destination = QByteArray(cacheData, header->totalItemSize - encodedKey.size() - 1);
+ }
+
+ return true;
+ }
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ }
+
+ return false;
+}
+
+void KSharedDataCache::clear()
+{
+ try {
+ Private::CacheLocker lock(d);
+
+ if (!lock.failed()) {
+ d->shm->clear();
+ }
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ }
+}
+
+bool KSharedDataCache::contains(const QString &key) const
+{
+ try {
+ Private::CacheLocker lock(d);
+ if (lock.failed()) {
+ return false;
+ }
+
+ return d->shm->findNamedEntry(key.toUtf8()) >= 0;
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ return false;
+ }
+}
+
+void KSharedDataCache::deleteCache(const QString &cacheName)
+{
+ QString cachePath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/") + cacheName + QLatin1String(".kcache");
+
+ // Note that it is important to simply unlink the file, and not truncate it
+ // smaller first to avoid SIGBUS errors and similar with shared memory
+ // attached to the underlying inode.
+ qCDebug(KCOREADDONS_DEBUG) << "Removing cache at" << cachePath;
+ QFile::remove(cachePath);
+}
+
+unsigned KSharedDataCache::totalSize() const
+{
+ try {
+ Private::CacheLocker lock(d);
+ if (lock.failed()) {
+ return 0u;
+ }
+
+ return d->shm->cacheSize;
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ return 0u;
+ }
+}
+
+unsigned KSharedDataCache::freeSize() const
+{
+ try {
+ Private::CacheLocker lock(d);
+ if (lock.failed()) {
+ return 0u;
+ }
+
+ return d->shm->cacheAvail * d->shm->cachePageSize();
+ } catch (KSDCCorrupted) {
+ d->recoverCorruptedCache();
+ return 0u;
+ }
+}
+
+KSharedDataCache::EvictionPolicy KSharedDataCache::evictionPolicy() const
+{
+ if (d && d->shm) {
+ return static_cast<EvictionPolicy>(d->shm->evictionPolicy.fetchAndAddAcquire(0));
+ }
+
+ return NoEvictionPreference;
+}
+
+void KSharedDataCache::setEvictionPolicy(EvictionPolicy newPolicy)
+{
+ if (d && d->shm) {
+ d->shm->evictionPolicy.fetchAndStoreRelease(static_cast<int>(newPolicy));
+ }
+}
+
+unsigned KSharedDataCache::timestamp() const
+{
+ if (d && d->shm) {
+ return static_cast<unsigned>(d->shm->cacheTimestamp.fetchAndAddAcquire(0));
+ }
+
+ return 0;
+}
+
+void KSharedDataCache::setTimestamp(unsigned newTimestamp)
+{
+ if (d && d->shm) {
+ d->shm->cacheTimestamp.fetchAndStoreRelease(static_cast<int>(newTimestamp));
+ }
+}
--- /dev/null
+/*
+ This file is part of the KDE project.
+
+ SPDX-FileCopyrightText: 2010 Michael Pyne <mpyne@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KSHAREDDATACACHE_H
+#define KSHAREDDATACACHE_H
+
+#include <kcoreaddons_export.h>
+
+class QString;
+class QByteArray;
+
+/**
+ * @class KSharedDataCache kshareddatacache.h KSharedDataCache
+ *
+ * @brief A simple data cache which uses shared memory to quickly access data
+ * stored on disk.
+ *
+ * This class is meant to be used with KImageCache and similar classes but can
+ * be used directly if used with care.
+ *
+ * Example usage:
+ *
+ * @code
+ * QString loadTranslatedDocument(KSharedDataCache *cache) {
+ *
+ * // Find the data
+ * QByteArray document;
+ *
+ * if (!cache->find("translated-doc-template", &document)) {
+ * // Entry is not cached, manually generate and then add to cache.
+ * document = translateDocument(globalTemplate());
+ * cache->insert(document);
+ * }
+ *
+ * // Don't forget to encode/decode properly
+ * return QString::fromUtf8(document);
+ * }
+ * @endcode
+ *
+ * @author Michael Pyne <mpyne@kde.org>
+ * @see KImageCache
+ * @since 4.5
+ */
+class KCOREADDONS_EXPORT KSharedDataCache
+{
+public:
+ /**
+ * Attaches to a shared cache, creating it if necessary. If supported, this
+ * data cache will be shared across all processes using this cache (with
+ * subsequent memory savings). If shared memory is unsupported or a
+ * failure occurs, caching will still be supported, but only in the same
+ * process, and only using the same KSharedDataCache object.
+ *
+ * @param cacheName Name of the cache to use/share.
+ * @param defaultCacheSize Amount of data to be able to store, in bytes. The
+ * actual size will be slightly larger on disk due to accounting
+ * overhead. If the cache already existed then it <em>will not</em> be
+ * resized. For this reason you should specify some reasonable size.
+ * @param expectedItemSize The average size of an item that would be stored
+ * in the cache, in bytes. Choosing an average size of zero bytes causes
+ * KSharedDataCache to use whatever it feels is the best default for the
+ * system.
+ */
+ KSharedDataCache(const QString &cacheName, unsigned defaultCacheSize, unsigned expectedItemSize = 0);
+ ~KSharedDataCache();
+
+ KSharedDataCache(const KSharedDataCache &) = delete;
+ KSharedDataCache &operator=(const KSharedDataCache &) = delete;
+
+ enum EvictionPolicy {
+ // The default value for data in our shared memory will be 0, so it is
+ // important that whatever we want for the default value is also 0.
+ NoEvictionPreference = 0,
+ EvictLeastRecentlyUsed,
+ EvictLeastOftenUsed,
+ EvictOldest,
+ };
+
+ /**
+ * @return The removal policy in use by the shared cache.
+ * @see EvictionPolicy
+ */
+ EvictionPolicy evictionPolicy() const;
+
+ /**
+ * Sets the entry removal policy for the shared cache to
+ * @p newPolicy. The default is EvictionPolicy::NoEvictionPreference.
+ *
+ * @see EvictionPolicy
+ */
+ void setEvictionPolicy(EvictionPolicy newPolicy);
+
+ /**
+ * Attempts to insert the entry @p data into the shared cache, named by
+ * @p key, and returns true only if successful.
+ *
+ * Note that even if the insert was successful, that the newly added entry
+ * may be evicted by other processes contending for the cache.
+ */
+ bool insert(const QString &key, const QByteArray &data);
+
+ /**
+ * Returns the data in the cache named by @p key (even if it's some other
+ * process's data named with the same key!), stored in @p destination. If there is
+ * no entry named by @p key then @p destination is left unchanged. The return value
+ * is used to tell what happened.
+ *
+ * If you simply want to verify whether an entry is present in the cache then
+ * see contains().
+ *
+ * @param key The key to find in the cache.
+ * @param destination Is set to the value of @p key in the cache if @p key is
+ * present, left unchanged otherwise.
+ * @return true if @p key was present in the cache (@p destination will also be
+ * updated), false if @p key was not present (@p destination will be
+ * unchanged).
+ */
+ bool find(const QString &key, QByteArray *destination) const;
+
+ /**
+ * Removes all entries from the cache.
+ */
+ void clear();
+
+ /**
+ * Removes the underlying file from the cache. Note that this is *all* that this
+ * function does. The shared memory segment is still attached and will still contain
+ * all the data until all processes currently attached remove the mapping.
+ *
+ * In order to remove the data see clear().
+ */
+ static void deleteCache(const QString &cacheName);
+
+ /**
+ * Returns true if the cache currently contains the image for the given
+ * filename.
+ *
+ * NOTE: Calling this function is threadsafe, but it is in general not
+ * possible to guarantee the image stays cached immediately afterwards,
+ * so if you need the result use find().
+ */
+ bool contains(const QString &key) const;
+
+ /**
+ * Returns the usable cache size in bytes. The actual amount of memory
+ * used will be slightly larger than this to account for required
+ * accounting overhead.
+ */
+ unsigned totalSize() const;
+
+ /**
+ * Returns the amount of free space in the cache, in bytes. Due to
+ * implementation details it is possible to still not be able to fit an
+ * entry in the cache at any given time even if it is smaller than the
+ * amount of space remaining.
+ */
+ unsigned freeSize() const;
+
+ /**
+ * @return The shared timestamp of the cache. The interpretation of the
+ * timestamp returned is up to the application. KSharedDataCache
+ * will initialize the timestamp to the time returned by @c time(2)
+ * on cache creation, but KSharedDataCache will not touch the
+ * timestamp again.
+ * @see setTimestamp()
+ * @since 4.6
+ */
+ unsigned timestamp() const;
+
+ /**
+ * Sets the shared timestamp of the cache. Timestamping is supported to
+ * allow applications to more effectively "version" the data stored in the
+ * cache. However, the timestamp is shared with <em>all</em> applications
+ * using the cache so you should always be prepared for invalid
+ * timestamps.
+ *
+ * When the cache is first created (note that this is different from
+ * attaching to an existing shared cache on disk), the cache timestamp is
+ * initialized to the time returned by @c time(2). KSharedDataCache will
+ * not update the timestamp again, it is only updated through this method.
+ *
+ * Example:
+ * @code
+ * QImage loadCachedImage(const QString &key)
+ * {
+ * // Check timestamp
+ * if (m_sharedCache->timestamp() < m_currentThemeTimestamp) {
+ * // Cache is stale, clean it out.
+ * m_sharedCache->clear();
+ * m_sharedCache->setTimestamp(m_currentThemeTimestamp);
+ * }
+ *
+ * // Check cache and load image as usual...
+ * }
+ * @endcode
+ *
+ * @param newTimestamp The new timestamp to mark the shared cache with.
+ * @see timestamp()
+ * @since 4.6
+ */
+ void setTimestamp(unsigned newTimestamp);
+
+private:
+ class Private;
+ Private *d;
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE project.
+
+ SPDX-FileCopyrightText: 2010 Michael Pyne <mpyne@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KSHAREDDATACACHE_P_H
+#define KSHAREDDATACACHE_P_H
+
+#include <config-caching.h> // HAVE_SYS_MMAN_H
+
+#include <QSharedPointer>
+#include <qbasicatomic.h>
+
+#include "kcoreaddons_debug.h"
+
+#include <cerrno>
+#include <fcntl.h>
+#include <sched.h> // sched_yield
+#include <time.h>
+#include <unistd.h> // Check for sched_yield
+
+// Mac OS X, for all its POSIX compliance, does not support timeouts on its
+// mutexes, which is kind of a disaster for cross-process support. However
+// synchronization primitives still work, they just might hang if the cache is
+// corrupted, so keep going.
+#if defined(_POSIX_TIMEOUTS) && ((_POSIX_TIMEOUTS == 0) || (_POSIX_TIMEOUTS >= 200112L))
+#define KSDC_TIMEOUTS_SUPPORTED 1
+#endif
+
+#if defined(__GNUC__) && !defined(KSDC_TIMEOUTS_SUPPORTED)
+#warning "No support for POSIX timeouts -- application hangs are possible if the cache is corrupt"
+#endif
+
+#if defined(_POSIX_THREAD_PROCESS_SHARED) && ((_POSIX_THREAD_PROCESS_SHARED == 0) || (_POSIX_THREAD_PROCESS_SHARED >= 200112L)) && !defined(__APPLE__)
+#include <pthread.h>
+#define KSDC_THREAD_PROCESS_SHARED_SUPPORTED 1
+#endif
+
+#if defined(_POSIX_SEMAPHORES) && ((_POSIX_SEMAPHORES == 0) || (_POSIX_SEMAPHORES >= 200112L))
+#include <semaphore.h>
+#define KSDC_SEMAPHORES_SUPPORTED 1
+#endif
+
+#if defined(__GNUC__) && !defined(KSDC_SEMAPHORES_SUPPORTED) && !defined(KSDC_THREAD_PROCESS_SHARED_SUPPORTED)
+#warning "No system support claimed for process-shared synchronization, KSharedDataCache will be mostly useless."
+#endif
+
+#if defined(_POSIX_MAPPED_FILES) && ((_POSIX_MAPPED_FILES == 0) || (_POSIX_MAPPED_FILES >= 200112L))
+#define KSDC_MAPPED_FILES_SUPPORTED 1
+#endif
+
+#if defined(_POSIX_SYNCHRONIZED_IO) && ((_POSIX_SYNCHRONIZED_IO == 0) || (_POSIX_SYNCHRONIZED_IO >= 200112L))
+#define KSDC_SYNCHRONIZED_IO_SUPPORTED 1
+#endif
+
+// msync(2) requires both MAPPED_FILES and SYNCHRONIZED_IO POSIX options
+#if defined(KSDC_MAPPED_FILES_SUPPORTED) && defined(KSDC_SYNCHRONIZED_IO_SUPPORTED)
+#define KSDC_MSYNC_SUPPORTED
+#endif
+
+// posix_fallocate is used to ensure that the file used for the cache is
+// actually fully committed to disk before attempting to use the file.
+#if defined(_POSIX_ADVISORY_INFO) && ((_POSIX_ADVISORY_INFO == 0) || (_POSIX_ADVISORY_INFO >= 200112L))
+#define KSDC_POSIX_FALLOCATE_SUPPORTED 1
+#endif
+#ifdef Q_OS_OSX
+#include "posix_fallocate_mac.h"
+#define KSDC_POSIX_FALLOCATE_SUPPORTED 1
+#endif
+
+// BSD/Mac OS X compat
+#if HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+/**
+ * This class defines an interface used by KSharedDataCache::Private to offload
+ * proper locking and unlocking depending on what the platform supports at
+ * runtime and compile-time.
+ */
+class KSDCLock
+{
+public:
+ virtual ~KSDCLock()
+ {
+ }
+
+ // Return value indicates if the mutex was properly initialized (including
+ // threads-only as a fallback).
+ virtual bool initialize(bool &processSharingSupported)
+ {
+ processSharingSupported = false;
+ return false;
+ }
+
+ virtual bool lock()
+ {
+ return false;
+ }
+
+ virtual void unlock()
+ {
+ }
+};
+
+/**
+ * This is a very basic lock that should work on any system where GCC atomic
+ * intrinsics are supported. It can waste CPU so better primitives should be
+ * used if available on the system.
+ */
+class simpleSpinLock : public KSDCLock
+{
+public:
+ simpleSpinLock(QBasicAtomicInt &spinlock)
+ : m_spinlock(spinlock)
+ {
+ }
+
+ bool initialize(bool &processSharingSupported) override
+ {
+ // Clear the spinlock
+ m_spinlock.storeRelaxed(0);
+ processSharingSupported = true;
+ return true;
+ }
+
+ bool lock() override
+ {
+ // Spin a few times attempting to gain the lock, as upper-level code won't
+ // attempt again without assuming the cache is corrupt.
+ for (unsigned i = 50; i > 0; --i) {
+ if (m_spinlock.testAndSetAcquire(0, 1)) {
+ return true;
+ }
+
+ // Don't steal the processor and starve the thread we're waiting
+ // on.
+ loopSpinPause();
+ }
+
+ return false;
+ }
+
+ void unlock() override
+ {
+ m_spinlock.testAndSetRelease(1, 0);
+ }
+
+private:
+#ifdef Q_CC_GNU
+ __attribute__((always_inline,
+ gnu_inline
+#if !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG)
+ ,
+ artificial
+#endif
+ ))
+#endif
+ static inline void
+ loopSpinPause()
+ {
+ // TODO: Spinning might be better in multi-core systems... but that means
+ // figuring how to find numbers of CPUs in a cross-platform way.
+#ifdef _POSIX_PRIORITY_SCHEDULING
+ sched_yield();
+#else
+ // Sleep for shortest possible time (nanosleep should round-up).
+ struct timespec wait_time = {0 /* sec */, 100 /* ns */};
+ ::nanosleep(&wait_time, static_cast<struct timespec *>(0));
+#endif
+ }
+
+ QBasicAtomicInt &m_spinlock;
+};
+
+#ifdef KSDC_THREAD_PROCESS_SHARED_SUPPORTED
+class pthreadLock : public KSDCLock
+{
+public:
+ pthreadLock(pthread_mutex_t &mutex)
+ : m_mutex(mutex)
+ {
+ }
+
+ bool initialize(bool &processSharingSupported) override
+ {
+ // Setup process-sharing.
+ pthread_mutexattr_t mutexAttr;
+ processSharingSupported = false;
+
+ // Initialize attributes, enable process-shared primitives, and setup
+ // the mutex.
+ if (::sysconf(_SC_THREAD_PROCESS_SHARED) >= 200112L && pthread_mutexattr_init(&mutexAttr) == 0) {
+ if (pthread_mutexattr_setpshared(&mutexAttr, PTHREAD_PROCESS_SHARED) == 0 && pthread_mutex_init(&m_mutex, &mutexAttr) == 0) {
+ processSharingSupported = true;
+ }
+ pthread_mutexattr_destroy(&mutexAttr);
+ }
+
+ // Attempt to setup for thread-only synchronization.
+ if (!processSharingSupported && pthread_mutex_init(&m_mutex, nullptr) != 0) {
+ return false;
+ }
+
+ return true;
+ }
+
+ bool lock() override
+ {
+ return pthread_mutex_lock(&m_mutex) == 0;
+ }
+
+ void unlock() override
+ {
+ pthread_mutex_unlock(&m_mutex);
+ }
+
+protected:
+ pthread_mutex_t &m_mutex;
+};
+#endif
+
+#if defined(KSDC_THREAD_PROCESS_SHARED_SUPPORTED) && defined(KSDC_TIMEOUTS_SUPPORTED)
+class pthreadTimedLock : public pthreadLock
+{
+public:
+ pthreadTimedLock(pthread_mutex_t &mutex)
+ : pthreadLock(mutex)
+ {
+ }
+
+ bool lock() override
+ {
+ struct timespec timeout;
+
+ // Long timeout, but if we fail to meet this timeout it's probably a cache
+ // corruption (and if we take 8 seconds then it should be much much quicker
+ // the next time anyways since we'd be paged back in from disk)
+ timeout.tv_sec = 10 + ::time(nullptr); // Absolute time, so 10 seconds from now
+ timeout.tv_nsec = 0;
+
+ return pthread_mutex_timedlock(&m_mutex, &timeout) == 0;
+ }
+};
+#endif
+
+#ifdef KSDC_SEMAPHORES_SUPPORTED
+class semaphoreLock : public KSDCLock
+{
+public:
+ semaphoreLock(sem_t &semaphore)
+ : m_semaphore(semaphore)
+ {
+ }
+
+ bool initialize(bool &processSharingSupported) override
+ {
+ processSharingSupported = false;
+ if (::sysconf(_SC_SEMAPHORES) < 200112L) {
+ return false;
+ }
+
+ // sem_init sets up process-sharing for us.
+ if (sem_init(&m_semaphore, 1, 1) == 0) {
+ processSharingSupported = true;
+ }
+ // If not successful try falling back to thread-shared.
+ else if (sem_init(&m_semaphore, 0, 1) != 0) {
+ return false;
+ }
+
+ return true;
+ }
+
+ bool lock() override
+ {
+ return sem_wait(&m_semaphore) == 0;
+ }
+
+ void unlock() override
+ {
+ sem_post(&m_semaphore);
+ }
+
+protected:
+ sem_t &m_semaphore;
+};
+#endif
+
+#if defined(KSDC_SEMAPHORES_SUPPORTED) && defined(KSDC_TIMEOUTS_SUPPORTED)
+class semaphoreTimedLock : public semaphoreLock
+{
+public:
+ semaphoreTimedLock(sem_t &semaphore)
+ : semaphoreLock(semaphore)
+ {
+ }
+
+ bool lock() override
+ {
+ struct timespec timeout;
+
+ // Long timeout, but if we fail to meet this timeout it's probably a cache
+ // corruption (and if we take 8 seconds then it should be much much quicker
+ // the next time anyways since we'd be paged back in from disk)
+ timeout.tv_sec = 10 + ::time(nullptr); // Absolute time, so 10 seconds from now
+ timeout.tv_nsec = 0;
+
+ return sem_timedwait(&m_semaphore, &timeout) == 0;
+ }
+};
+#endif
+
+// This enum controls the type of the locking used for the cache to allow
+// for as much portability as possible. This value will be stored in the
+// cache and used by multiple processes, therefore you should consider this
+// a versioned field, do not re-arrange.
+enum SharedLockId {
+ LOCKTYPE_INVALID = 0,
+ LOCKTYPE_MUTEX = 1, // pthread_mutex
+ LOCKTYPE_SEMAPHORE = 2, // sem_t
+ LOCKTYPE_SPINLOCK = 3, // atomic int in shared memory
+};
+
+// This type is a union of all possible lock types, with a SharedLockId used
+// to choose which one is actually in use.
+struct SharedLock {
+ union {
+#if defined(KSDC_THREAD_PROCESS_SHARED_SUPPORTED)
+ pthread_mutex_t mutex;
+#endif
+#if defined(KSDC_SEMAPHORES_SUPPORTED)
+ sem_t semaphore;
+#endif
+ QBasicAtomicInt spinlock;
+
+ // It would be highly unfortunate if a simple glibc upgrade or kernel
+ // addition caused this structure to change size when an existing
+ // lock was thought present, so reserve enough size to cover any
+ // reasonable locking structure
+ char unused[64];
+ };
+
+ SharedLockId type;
+};
+
+/**
+ * This is a method to determine the best lock type to use for a
+ * shared cache, based on local support. An identifier to the appropriate
+ * SharedLockId is returned, which can be passed to createLockFromId().
+ */
+static SharedLockId findBestSharedLock()
+{
+ // We would prefer a process-shared capability that also supports
+ // timeouts. Failing that, process-shared is preferred over timeout
+ // support. Failing that we'll go thread-local
+ bool timeoutsSupported = false;
+ bool pthreadsProcessShared = false;
+ bool semaphoresProcessShared = false;
+
+#ifdef KSDC_TIMEOUTS_SUPPORTED
+ timeoutsSupported = ::sysconf(_SC_TIMEOUTS) >= 200112L;
+#endif
+
+ // Now that we've queried timeouts, try actually creating real locks and
+ // seeing if there's issues with that.
+#ifdef KSDC_THREAD_PROCESS_SHARED_SUPPORTED
+ {
+ pthread_mutex_t tempMutex;
+ QSharedPointer<KSDCLock> tempLock;
+ if (timeoutsSupported) {
+#ifdef KSDC_TIMEOUTS_SUPPORTED
+ tempLock = QSharedPointer<KSDCLock>(new pthreadTimedLock(tempMutex));
+#endif
+ } else {
+ tempLock = QSharedPointer<KSDCLock>(new pthreadLock(tempMutex));
+ }
+
+ tempLock->initialize(pthreadsProcessShared);
+ }
+#endif
+
+ // Our first choice is pthread_mutex_t for compatibility.
+ if (timeoutsSupported && pthreadsProcessShared) {
+ return LOCKTYPE_MUTEX;
+ }
+
+#ifdef KSDC_SEMAPHORES_SUPPORTED
+ {
+ sem_t tempSemaphore;
+ QSharedPointer<KSDCLock> tempLock;
+ if (timeoutsSupported) {
+ tempLock = QSharedPointer<KSDCLock>(new semaphoreTimedLock(tempSemaphore));
+ } else {
+ tempLock = QSharedPointer<KSDCLock>(new semaphoreLock(tempSemaphore));
+ }
+
+ tempLock->initialize(semaphoresProcessShared);
+ }
+#endif
+
+ if (timeoutsSupported && semaphoresProcessShared) {
+ return LOCKTYPE_SEMAPHORE;
+ } else if (pthreadsProcessShared) {
+ return LOCKTYPE_MUTEX;
+ } else if (semaphoresProcessShared) {
+ return LOCKTYPE_SEMAPHORE;
+ }
+
+ // Fallback to a dumb-simple but possibly-CPU-wasteful solution.
+ return LOCKTYPE_SPINLOCK;
+}
+
+static KSDCLock *createLockFromId(SharedLockId id, SharedLock &lock)
+{
+ switch (id) {
+#ifdef KSDC_THREAD_PROCESS_SHARED_SUPPORTED
+ case LOCKTYPE_MUTEX:
+#ifdef KSDC_TIMEOUTS_SUPPORTED
+ if (::sysconf(_SC_TIMEOUTS) >= 200112L) {
+ return new pthreadTimedLock(lock.mutex);
+ }
+#endif
+ return new pthreadLock(lock.mutex);
+
+ break;
+#endif
+
+#ifdef KSDC_SEMAPHORES_SUPPORTED
+ case LOCKTYPE_SEMAPHORE:
+#ifdef KSDC_TIMEOUTS_SUPPORTED
+ if (::sysconf(_SC_SEMAPHORES) >= 200112L) {
+ return new semaphoreTimedLock(lock.semaphore);
+ }
+#endif
+ return new semaphoreLock(lock.semaphore);
+
+ break;
+#endif
+
+ case LOCKTYPE_SPINLOCK:
+ return new simpleSpinLock(lock.spinlock);
+ break;
+
+ default:
+ qCCritical(KCOREADDONS_DEBUG) << "Creating shell of a lock!";
+ return new KSDCLock;
+ }
+}
+
+static bool ensureFileAllocated(int fd, size_t fileSize)
+{
+#ifdef KSDC_POSIX_FALLOCATE_SUPPORTED
+ int result;
+ while ((result = ::posix_fallocate(fd, 0, fileSize)) == EINTR) {
+ ;
+ }
+
+ if (result != 0) {
+ if (result == ENOSPC) {
+ qCCritical(KCOREADDONS_DEBUG) << "No space left on device. Check filesystem free space at your XDG_CACHE_HOME!";
+ }
+ qCCritical(KCOREADDONS_DEBUG) << "The operating system is unable to promise" << fileSize
+ << "bytes for mapped cache, "
+ "abandoning the cache for crash-safety.";
+ return false;
+ }
+
+ return true;
+#else
+
+#ifdef __GNUC__
+#warning \
+ "This system does not seem to support posix_fallocate, which is needed to ensure KSharedDataCache's underlying files are fully committed to disk to avoid crashes with low disk space."
+#endif
+ qCWarning(KCOREADDONS_DEBUG) << "This system misses support for posix_fallocate()"
+ " -- ensure this partition has room for at least"
+ << fileSize << "bytes.";
+
+ // TODO: It's possible to emulate the functionality, but doing so
+ // overwrites the data in the file so we don't do this. If you were to add
+ // this emulation, you must ensure it only happens on initial creation of a
+ // new file and not just mapping an existing cache.
+
+ return true;
+#endif
+}
+
+#endif /* KSHAREDDATACACHE_P_H */
--- /dev/null
+/*
+ This file is part of the KDE project.
+
+ SPDX-FileCopyrightText: 2010 Michael Pyne <mpyne@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+/**
+ * This is a horrifically simple implementation of KSharedDataCache that is
+ * basically missing the "shared" part to it, for use on Windows or other platforms
+ * that don't support POSIX.
+ */
+#include "kshareddatacache.h"
+
+#include <QByteArray>
+#include <QCache>
+#include <QString>
+
+class Q_DECL_HIDDEN KSharedDataCache::Private
+{
+public:
+ KSharedDataCache::EvictionPolicy evictionPolicy;
+ QCache<QString, QByteArray> cache;
+};
+
+KSharedDataCache::KSharedDataCache(const QString &cacheName, unsigned defaultCacheSize, unsigned expectedItemSize)
+ : d(new Private)
+{
+ d->cache.setMaxCost(defaultCacheSize);
+
+ Q_UNUSED(cacheName);
+ Q_UNUSED(expectedItemSize);
+}
+
+KSharedDataCache::~KSharedDataCache()
+{
+ delete d;
+}
+
+KSharedDataCache::EvictionPolicy KSharedDataCache::evictionPolicy() const
+{
+ return d->evictionPolicy;
+}
+
+void KSharedDataCache::setEvictionPolicy(KSharedDataCache::EvictionPolicy newPolicy)
+{
+ d->evictionPolicy = newPolicy;
+}
+
+bool KSharedDataCache::insert(const QString &key, const QByteArray &data)
+{
+ return d->cache.insert(key, new QByteArray(data));
+}
+
+bool KSharedDataCache::find(const QString &key, QByteArray *destination) const
+{
+ QByteArray *value = d->cache.object(key);
+
+ if (value) {
+ if (destination) {
+ *destination = *value;
+ }
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void KSharedDataCache::clear()
+{
+ d->cache.clear();
+}
+
+void KSharedDataCache::deleteCache(const QString &cacheName)
+{
+ Q_UNUSED(cacheName);
+}
+
+bool KSharedDataCache::contains(const QString &key) const
+{
+ return d->cache.contains(key);
+}
+
+unsigned KSharedDataCache::totalSize() const
+{
+ return static_cast<unsigned>(d->cache.maxCost());
+}
+
+unsigned KSharedDataCache::freeSize() const
+{
+ if (d->cache.totalCost() < d->cache.maxCost()) {
+ return static_cast<unsigned>(d->cache.maxCost() - d->cache.totalCost());
+ } else {
+ return 0;
+ }
+}
+
+unsigned KSharedDataCache::timestamp() const
+{
+ return 0;
+}
+
+void KSharedDataCache::setTimestamp(unsigned newTimestamp)
+{
+}
--- /dev/null
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+
+ SPDX-FileCopyrightText: 2010 Mozilla Foundation
+ SPDX-FileContributor: Taras Glek <tglek@mozilla.com>
+
+ SPDX-License-Identifier: MPL-1.1 OR GPL-2.0-or-later OR LGPL-2.1-or-later
+*/
+
+#ifndef POSIX_FALLOCATE_MAC_H
+#define POSIX_FALLOCATE_MAC_H
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+// created from the OSX-specific code from Mozilla's mozilla::fallocation() function
+// of which the licensing information is copied above.
+// Adaptation (C) 2015,2016 R.J.V. Bertin
+
+// From Linux `man posix_fallocate`:
+// DESCRIPTION
+// The function posix_fallocate() ensures that disk space is allocated for
+// the file referred to by the descriptor fd for the bytes in the range
+// starting at offset and continuing for len bytes. After a successful
+// call to posix_fallocate(), subsequent writes to bytes in the specified
+// range are guaranteed not to fail because of lack of disk space.
+//
+// If the size of the file is less than offset+len, then the file is
+// increased to this size; otherwise the file size is left unchanged.
+
+// From OS X man fcntl:
+// F_PREALLOCATE Preallocate file storage space. Note: upon success, the space
+// that is allocated can be the same size or larger than the space
+// requested.
+// The F_PREALLOCATE command operates on the following structure:
+// typedef struct fstore {
+// u_int32_t fst_flags; /* IN: flags word */
+// int fst_posmode; /* IN: indicates offset field */
+// off_t fst_offset; /* IN: start of the region */
+// off_t fst_length; /* IN: size of the region */
+// off_t fst_bytesalloc; /* OUT: number of bytes allocated */
+// } fstore_t;
+// The flags (fst_flags) for the F_PREALLOCATE command are as follows:
+// F_ALLOCATECONTIG Allocate contiguous space.
+// F_ALLOCATEALL Allocate all requested space or no space at all.
+// The position modes (fst_posmode) for the F_PREALLOCATE command indicate how to use
+// the offset field. The modes are as follows:
+// F_PEOFPOSMODE Allocate from the physical end of file.
+// F_VOLPOSMODE Allocate from the volume offset.
+
+// From OS X man ftruncate:
+// DESCRIPTION
+// ftruncate() and truncate() cause the file named by path, or referenced by fildes, to
+// be truncated (or extended) to length bytes in size. If the file size exceeds length,
+// any extra data is discarded. If the file size is smaller than length, the file
+// extended and filled with zeros to the indicated length. The ftruncate() form requires
+// the file to be open for writing.
+// Note: ftruncate() and truncate() do not modify the current file offset for any open
+// file descriptions associated with the file.
+
+static int posix_fallocate(int fd, off_t offset, off_t len)
+{
+ off_t c_test;
+ int ret;
+ if (!__builtin_saddll_overflow(offset, len, &c_test)) {
+ fstore_t store = {F_ALLOCATECONTIG, F_PEOFPOSMODE, 0, offset + len};
+ // Try to get a continuous chunk of disk space
+ fcntl(fd, F_PREALLOCATE, &store);
+ if (ret < 0) {
+ // OK, perhaps we are too fragmented, allocate non-continuous
+ store.fst_flags = F_ALLOCATEALL;
+ ret = fcntl(fd, F_PREALLOCATE, &store);
+ if (ret < 0) {
+ return ret;
+ }
+ }
+ ret = ftruncate(fd, offset + len);
+ } else {
+ // offset+len would overflow.
+ ret = -1;
+ }
+ return ret;
+}
+
+#endif
--- /dev/null
+#cmakedefine01 HAVE_FAM
+
+#cmakedefine01 HAVE_SYS_INOTIFY_H
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2006 Jacob R Rideout <kde@jacobrideout.net>
+ SPDX-FileCopyrightText: 2015 Nick Shaforostoff <shafff@ukr.net>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kautosavefile.h"
+
+#include <climits> // for NAME_MAX
+
+#ifdef Q_OS_WIN
+#include <stdlib.h> // for _MAX_FNAME
+static const int maxNameLength = _MAX_FNAME;
+#else
+static const int maxNameLength = NAME_MAX;
+#endif
+
+#include "kcoreaddons_debug.h"
+#include "krandom.h"
+#include <QCoreApplication>
+#include <QDir>
+#include <QLatin1Char>
+#include <QLockFile>
+#include <QStandardPaths>
+
+class KAutoSaveFilePrivate
+{
+public:
+ enum {
+ NamePadding = 8,
+ };
+
+ QString tempFileName();
+ QUrl managedFile;
+ QLockFile *lock = nullptr;
+ bool managedFileNameChanged = false;
+};
+
+static QStringList findAllStales(const QString &appName)
+{
+ const QStringList dirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
+ QStringList files;
+
+ for (const QString &dir : dirs) {
+ QDir appDir(dir + QLatin1String("/stalefiles/") + appName);
+ qCDebug(KCOREADDONS_DEBUG) << "Looking in" << appDir.absolutePath();
+ const auto listFiles = appDir.entryList(QDir::Files);
+ for (const QString &file : listFiles) {
+ files << (appDir.absolutePath() + QLatin1Char('/') + file);
+ }
+ }
+ return files;
+}
+
+QString KAutoSaveFilePrivate::tempFileName()
+{
+ // Note: we drop any query string and user/pass info
+ const QString protocol(managedFile.scheme());
+ const QByteArray encodedDirectory = QUrl::toPercentEncoding(managedFile.adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash).path());
+ const QString directory = QString::fromLatin1(encodedDirectory);
+ const QByteArray encodedFileName = QUrl::toPercentEncoding(managedFile.fileName());
+ QString fileName = QString::fromLatin1(encodedFileName);
+
+ // Remove any part of the path to the right if it is longer than the maximum file name length;
+ // note that "file name" in this context means the file name component only (e.g. test.txt), and
+ // not the whole path (e.g. /home/simba/text.txt).
+ // Ensure that the max. file name length takes into account the other parts of the tempFileName
+ // Subtract 1 for the _ char, 3 for the padding separator, 5 is for the .lock,
+ // 7 for QLockFile's internal code (adding tmp .rmlock) = 16
+ const int pathLengthLimit = maxNameLength - NamePadding - fileName.size() - protocol.size() - 16;
+
+ QString junk = KRandom::randomString(NamePadding);
+ // This is done so that the separation between the filename and path can be determined
+ fileName += junk.rightRef(3) + protocol + QLatin1Char('_') + directory.leftRef(pathLengthLimit) + junk;
+
+ return fileName;
+}
+
+KAutoSaveFile::KAutoSaveFile(const QUrl &filename, QObject *parent)
+ : QFile(parent)
+ , d(new KAutoSaveFilePrivate)
+{
+ setManagedFile(filename);
+}
+
+KAutoSaveFile::KAutoSaveFile(QObject *parent)
+ : QFile(parent)
+ , d(new KAutoSaveFilePrivate)
+{
+}
+
+KAutoSaveFile::~KAutoSaveFile()
+{
+ releaseLock();
+ delete d->lock;
+}
+
+QUrl KAutoSaveFile::managedFile() const
+{
+ return d->managedFile;
+}
+
+void KAutoSaveFile::setManagedFile(const QUrl &filename)
+{
+ releaseLock();
+
+ d->managedFile = filename;
+ d->managedFileNameChanged = true;
+}
+
+void KAutoSaveFile::releaseLock()
+{
+ if (d->lock && d->lock->isLocked()) {
+ delete d->lock;
+ d->lock = nullptr;
+ if (!fileName().isEmpty()) {
+ remove();
+ }
+ }
+}
+
+bool KAutoSaveFile::open(OpenMode openmode)
+{
+ if (d->managedFile.isEmpty()) {
+ return false;
+ }
+
+ QString tempFile;
+ if (d->managedFileNameChanged) {
+ QString staleFilesDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/stalefiles/")
+ + QCoreApplication::instance()->applicationName();
+ if (!QDir().mkpath(staleFilesDir)) {
+ return false;
+ }
+ tempFile = staleFilesDir + QChar::fromLatin1('/') + d->tempFileName();
+ } else {
+ tempFile = fileName();
+ }
+
+ d->managedFileNameChanged = false;
+
+ setFileName(tempFile);
+
+ if (QFile::open(openmode)) {
+ if (!d->lock) {
+ d->lock = new QLockFile(tempFile + QLatin1String(".lock"));
+ d->lock->setStaleLockTime(60 * 1000); // HARDCODE, 1 minute
+ }
+
+ if (d->lock->isLocked() || d->lock->tryLock()) {
+ return true;
+ } else {
+ qCWarning(KCOREADDONS_DEBUG) << "Could not lock file:" << tempFile;
+ close();
+ }
+ }
+
+ return false;
+}
+
+static QUrl extractManagedFilePath(const QString &staleFileName)
+{
+ // Warning, if we had a long path, it was truncated by tempFileName()
+ // So in that case, extractManagedFilePath will return an incorrect truncated path for original source
+ const QStringRef sep = staleFileName.rightRef(3);
+ int sepPos = staleFileName.indexOf(sep);
+ const QByteArray managedFilename = staleFileName.leftRef(sepPos).toLatin1();
+
+ const int pathPos = staleFileName.indexOf(QChar::fromLatin1('_'), sepPos);
+ QUrl managedFileName;
+ // name.setScheme(file.mid(sepPos + 3, pathPos - sep.size() - 3));
+ const QByteArray encodedPath = staleFileName.midRef(pathPos + 1, staleFileName.length() - pathPos - 1 - KAutoSaveFilePrivate::NamePadding).toLatin1();
+ managedFileName.setPath(QUrl::fromPercentEncoding(encodedPath) + QLatin1Char('/') + QFileInfo(QUrl::fromPercentEncoding(managedFilename)).fileName());
+ return managedFileName;
+}
+
+bool staleMatchesManaged(const QString &staleFileName, const QUrl &managedFile)
+{
+ const QStringRef sep = staleFileName.rightRef(3);
+ int sepPos = staleFileName.indexOf(sep);
+ // Check filenames first
+ if (managedFile.fileName() != QUrl::fromPercentEncoding(staleFileName.leftRef(sepPos).toLatin1())) {
+ return false;
+ }
+ // Check paths
+ const int pathPos = staleFileName.indexOf(QChar::fromLatin1('_'), sepPos);
+ const QByteArray encodedPath = staleFileName.midRef(pathPos + 1, staleFileName.length() - pathPos - 1 - KAutoSaveFilePrivate::NamePadding).toLatin1();
+ return QUrl::toPercentEncoding(managedFile.path()).startsWith(encodedPath);
+}
+
+QList<KAutoSaveFile *> KAutoSaveFile::staleFiles(const QUrl &filename, const QString &applicationName)
+{
+ QString appName(applicationName);
+ if (appName.isEmpty()) {
+ appName = QCoreApplication::instance()->applicationName();
+ }
+
+ // get stale files
+ const QStringList files = findAllStales(appName);
+
+ QList<KAutoSaveFile *> list;
+
+ // contruct a KAutoSaveFile for stale files corresponding given filename
+ for (const QString &file : files) {
+ if (file.endsWith(QLatin1String(".lock")) || (!filename.isEmpty() && !staleMatchesManaged(QFileInfo(file).fileName(), filename))) {
+ continue;
+ }
+
+ // sets managedFile
+ KAutoSaveFile *asFile = new KAutoSaveFile(filename.isEmpty() ? extractManagedFilePath(file) : filename);
+ asFile->setFileName(file);
+ asFile->d->managedFileNameChanged = false; // do not regenerate tempfile name
+ list.append(asFile);
+ }
+
+ return list;
+}
+
+QList<KAutoSaveFile *> KAutoSaveFile::allStaleFiles(const QString &applicationName)
+{
+ return staleFiles(QUrl(), applicationName);
+}
+
+#include "moc_kautosavefile.cpp"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2006 Jacob R Rideout <kde@jacobrideout.net>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KAUTOSAVEFILE_H
+#define KAUTOSAVEFILE_H
+
+#include <kcoreaddons_export.h>
+
+#include <QFile>
+#include <QList>
+#include <QUrl>
+
+#include <memory>
+
+class KAutoSaveFilePrivate;
+/**
+ * \class KAutoSaveFile kautosavefile.h <KAutoSaveFile>
+ *
+ * @brief Creates and manages a temporary "auto-save" file.
+ * Autosave files are temporary files that applications use to store
+ * the unsaved data in a file they have open for
+ * editing. KAutoSaveFile allows you to easily create and manage such
+ * files, as well as to recover the unsaved data left over by a
+ * crashed or otherwise gone process.
+ *
+ * Each KAutoSaveFile object is associated with one specific file that
+ * the application holds open. KAutoSaveFile is also a QObject, so it
+ * can be reparented to the actual opened file object, so as to manage
+ * the lifetime of the temporary file.
+ *
+ * Typical use consists of:
+ * - verifying whether stale autosave files exist for the opened file
+ * - deciding whether to recover the old, autosaved data
+ * - if not recovering, creating a KAutoSaveFile object for the opened file
+ * - during normal execution of the program, periodically save unsaved
+ * data into the KAutoSaveFile file.
+ *
+ * KAutoSaveFile holds a lock on the autosave file, so it's safe to
+ * delete the file and recreate it later. Because of that, disposing
+ * of stale autosave files should be done with releaseLock(). No lock is
+ * held on the managed file.
+ *
+ * Examples:
+ * Opening a new file:
+ * @code
+ * void Document::open(const QUrl &url)
+ * {
+ * // check whether autosave files exist:
+ * const QList<KAutoSaveFile *> staleFiles = KAutoSaveFile::staleFiles(url);
+ * if (!staleFiles.isEmpty()) {
+ * if (KMessageBox::questionYesNo(parent,
+ * "Auto-saved files exist. Do you want to recover them now?",
+ * "File Recovery",
+ * "Recover", "Don't recover") == KMessage::Yes) {
+ * recoverFiles(staleFiles);
+ * return;
+ * } else {
+ * // remove the stale files
+ * for (KAutoSaveFile *stale : staleFiles) {
+ * stale->open(QIODevice::ReadWrite);
+ * delete stale;
+ * }
+ * }
+ * }
+ *
+ * // create new autosave object
+ * m_autosave = new KAutoSaveFile(url, this);
+ *
+ * // continue the process of opening file 'url'
+ * ...
+ * }
+ * @endcode
+ *
+ * The function recoverFiles could loop over the list of files and do this:
+ * @code
+ * for (KAutoSaveFile *stale : staleFiles) {
+ * if (!stale->open(QIODevice::ReadWrite)) {
+ * // show an error message; we could not steal the lockfile
+ * // maybe another application got to the file before us?
+ * delete stale;
+ * continue;
+ * }
+ * Document *doc = new Document;
+ * doc->m_autosave = stale;
+ * stale->setParent(doc); // reparent
+ *
+ * doc->setUrl(stale->managedFile());
+ * doc->setContents(stale->readAll());
+ * doc->setState(Document::Modified); // mark it as modified and unsaved
+ *
+ * documentManager->addDocument(doc);
+ * }
+ * @endcode
+ *
+ * If the file is unsaved, periodically write the contents to the save file:
+ * @code
+ * if (!m_autosave->isOpen() && !m_autosave->open(QIODevice::ReadWrite)) {
+ * // show error: could not open the autosave file
+ * }
+ * m_autosave->write(contents());
+ * @endcode
+ *
+ * When the user saves the file, the autosaved file is no longer
+ * necessary and can be removed or emptied.
+ * @code
+ * m_autosave->resize(0); // leaves the file open
+ * @endcode
+ *
+ * @code
+ * m_autosave->remove(); // closes the file
+ * @endcode
+ *
+ * @author Jacob R Rideout <kde@jacobrideout.net>
+ */
+class KCOREADDONS_EXPORT KAutoSaveFile : public QFile
+{
+ Q_OBJECT
+public:
+ /**
+ * Constructs a KAutoSaveFile for file @p filename. The temporary
+ * file is not opened or created until actually needed. The file
+ * @p filename does not have to exist for KAutoSaveFile to be
+ * constructed (if it exists, it will not be touched).
+ *
+ * @param filename the filename that this KAutoSaveFile refers to
+ * @param parent the parent object
+ */
+ explicit KAutoSaveFile(const QUrl &filename, QObject *parent = nullptr);
+
+ /**
+ * @overload
+ * Constructs a KAutoSaveFile object. Note that you need to call
+ * setManagedFile() before calling open().
+ *
+ * @param parent the parent object
+ */
+ explicit KAutoSaveFile(QObject *parent = nullptr);
+
+ /**
+ * Destroys the KAutoSaveFile object, removes the autosave
+ * file and drops the lock being held (if any).
+ */
+ ~KAutoSaveFile() override;
+
+ /**
+ * Retrieves the URL of the file managed by KAutoSaveFile. This
+ * is the same URL that was given to setManagedFile() or the
+ * KAutoSaveFile constructor.
+ *
+ * This is the name of the real file being edited by the
+ * application. To get the name of the temporary file where data
+ * can be saved, use fileName() (after you have called open()).
+ */
+ QUrl managedFile() const;
+
+ /**
+ * Sets the URL of the file managed by KAutoSaveFile. This should
+ * be the name of the real file being edited by the application.
+ * If the file was previously set, this function calls releaseLock().
+ *
+ * @param filename the filename that this KAutoSaveFile refers to
+ */
+ void setManagedFile(const QUrl &filename);
+
+ /**
+ * Closes the autosave file resource and removes the lock
+ * file. The file name returned by fileName() will no longer be
+ * protected and can be overwritten by another application at any
+ * time. To obtain a new lock, call open() again.
+ *
+ * This function calls remove(), so the autosave temporary file
+ * will be removed too.
+ */
+ virtual void releaseLock();
+
+ /**
+ * Opens the autosave file and locks it if it wasn't already
+ * locked. The name of the temporary file where data can be saved
+ * to will be set by this function and can be retrieved with
+ * fileName(). It will not change unless releaseLock() is called. No
+ * other application will attempt to edit such a file either while
+ * the lock is held.
+ *
+ * @param openmode the mode that should be used to open the file,
+ * probably QIODevice::ReadWrite
+ * @returns true if the file could be opened (= locked and
+ * created), false if the operation failed
+ */
+ bool open(OpenMode openmode) override;
+
+ /**
+ * Checks for stale autosave files for the file @p url. Returns a list
+ * of autosave files that contain autosaved data left behind by
+ * other instances of the application, due to crashing or
+ * otherwise uncleanly exiting.
+ *
+ * It is the application's job to determine what to do with such
+ * unsaved data. Generally, this is done by asking the user if he
+ * wants to see the recovered data, and then allowing the user to
+ * save if he wants to.
+ *
+ * If not given, the application name is obtained from
+ * QCoreApplication, so be sure to have set it correctly before
+ * calling this function.
+ *
+ * This function returns a list of unopened KAutoSaveFile
+ * objects. By calling open() on them, the application will steal
+ * the lock. Subsequent releaseLock() or deleting of the object will
+ * then erase the stale autosave file.
+ *
+ * The application owns all returned KAutoSaveFile objects and is
+ * responsible for deleting them when no longer needed. Remember that
+ * deleting the KAutoSaveFile will release the file lock and remove the
+ * stale autosave file.
+ */
+ static QList<KAutoSaveFile *> staleFiles(const QUrl &url, const QString &applicationName = QString());
+
+ /**
+ * Returns all stale autosave files left behind by crashed or
+ * otherwise gone instances of this application.
+ *
+ * If not given, the application name is obtained from
+ * QCoreApplication, so be sure to have set it correctly before
+ * calling this function.
+ *
+ * See staleFiles() for information on the returned objects.
+ *
+ * The application owns all returned KAutoSaveFile objects and is
+ * responsible for deleting them when no longer needed. Remember that
+ * deleting the KAutoSaveFile will release the file lock and remove the
+ * stale autosave file.
+ */
+ static QList<KAutoSaveFile *> allStaleFiles(const QString &applicationName = QString());
+
+private:
+ Q_DISABLE_COPY(KAutoSaveFile)
+ friend class KAutoSaveFilePrivate;
+ std::unique_ptr<KAutoSaveFilePrivate> const d;
+};
+
+#endif // KAUTOSAVEFILE_H
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1999 Waldo Bastian <bastian@kde.org>
+ SPDX-FileCopyrightText: 2006 Allen Winter <winter@kde.org>
+ SPDX-FileCopyrightText: 2006 Gregory S. Hayes <syncomm@kde.org>
+ SPDX-FileCopyrightText: 2006 Jaison Lee <lee.jaison@gmail.com>
+ SPDX-FileCopyrightText: 2011 Romain Perier <bambi@ubuntu.com>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kbackup.h"
+
+#include <QDir>
+#include <QFileInfo>
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 75)
+#include <QProcess>
+#include <QStandardPaths>
+#endif
+
+namespace KBackup
+{
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 75)
+bool backupFile(const QString &qFilename, const QString &backupDir)
+{
+ return (simpleBackupFile(qFilename, backupDir, QStringLiteral("~")));
+}
+#endif
+
+bool simpleBackupFile(const QString &qFilename, const QString &backupDir, const QString &backupExtension)
+{
+ QString backupFileName = qFilename + backupExtension;
+
+ if (!backupDir.isEmpty()) {
+ QFileInfo fileInfo(qFilename);
+ backupFileName = backupDir + QLatin1Char('/') + fileInfo.fileName() + backupExtension;
+ }
+
+ // qCDebug(KCOREADDONS_DEBUG) << "KBackup copying " << qFilename << " to " << backupFileName;
+ QFile::remove(backupFileName);
+ return QFile::copy(qFilename, backupFileName);
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 75)
+bool rcsBackupFile(const QString &qFilename, const QString &backupDir, const QString &backupMessage)
+{
+ QFileInfo fileInfo(qFilename);
+
+ QString qBackupFilename;
+ if (backupDir.isEmpty()) {
+ qBackupFilename = qFilename;
+ } else {
+ qBackupFilename = backupDir + fileInfo.fileName();
+ }
+ qBackupFilename += QLatin1String(",v");
+
+ // If backupDir is specified, copy qFilename to the
+ // backupDir and perform the commit there, unlinking
+ // backupDir/qFilename when finished.
+ if (!backupDir.isEmpty()) {
+ if (!QFile::copy(qFilename, backupDir + fileInfo.fileName())) {
+ return false;
+ }
+ fileInfo.setFile(backupDir + QLatin1Char('/') + fileInfo.fileName());
+ }
+
+ const QString cipath = QStandardPaths::findExecutable(QStringLiteral("ci"));
+ const QString copath = QStandardPaths::findExecutable(QStringLiteral("co"));
+ const QString rcspath = QStandardPaths::findExecutable(QStringLiteral("rcs"));
+ if (cipath.isEmpty() || copath.isEmpty() || rcspath.isEmpty()) {
+ return false;
+ }
+
+ // Check in the file unlocked with 'ci'
+ QProcess ci;
+ if (!backupDir.isEmpty()) {
+ ci.setWorkingDirectory(backupDir);
+ }
+ ci.start(cipath, QStringList{QStringLiteral("-u"), fileInfo.filePath()});
+ if (!ci.waitForStarted()) {
+ return false;
+ }
+ ci.write(backupMessage.toLocal8Bit());
+ ci.write(".");
+ ci.closeWriteChannel();
+ if (!ci.waitForFinished()) {
+ return false;
+ }
+
+ // Use 'rcs' to unset strict locking
+ QProcess rcs;
+ if (!backupDir.isEmpty()) {
+ rcs.setWorkingDirectory(backupDir);
+ }
+ rcs.start(rcspath, QStringList{QStringLiteral("-U"), qBackupFilename});
+ if (!rcs.waitForFinished()) {
+ return false;
+ }
+
+ // Use 'co' to checkout the current revision and restore permissions
+ QProcess co;
+ if (!backupDir.isEmpty()) {
+ co.setWorkingDirectory(backupDir);
+ }
+ co.start(copath, QStringList{qBackupFilename});
+ if (!co.waitForFinished()) {
+ return false;
+ }
+
+ if (!backupDir.isEmpty()) {
+ return QFile::remove(fileInfo.filePath());
+ } else {
+ return true;
+ }
+}
+#endif
+
+bool numberedBackupFile(const QString &qFilename, const QString &backupDir, const QString &backupExtension, const uint maxBackups)
+{
+ QFileInfo fileInfo(qFilename);
+
+ // The backup file name template.
+ QString sTemplate;
+ if (backupDir.isEmpty()) {
+ sTemplate = qFilename + QLatin1String(".%1") + backupExtension;
+ } else {
+ sTemplate = backupDir + QLatin1Char('/') + fileInfo.fileName() + QLatin1String(".%1") + backupExtension;
+ }
+
+ // First, search backupDir for numbered backup files to remove.
+ // Remove all with number 'maxBackups' and greater.
+ QDir d = backupDir.isEmpty() ? fileInfo.dir() : backupDir;
+ d.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
+ const QStringList nameFilters = QStringList(fileInfo.fileName() + QLatin1String(".*") + backupExtension);
+ d.setNameFilters(nameFilters);
+ d.setSorting(QDir::Name);
+
+ uint maxBackupFound = 0;
+ const QFileInfoList infoList = d.entryInfoList();
+ for (const QFileInfo &fi : infoList) {
+ if (fi.fileName().endsWith(backupExtension)) {
+ // sTemp holds the file name, without the ending backupExtension
+ QString sTemp = fi.fileName();
+ sTemp.truncate(fi.fileName().length() - backupExtension.length());
+ // compute the backup number
+ int idex = sTemp.lastIndexOf(QLatin1Char('.'));
+ if (idex > 0) {
+ bool ok;
+ uint num = sTemp.midRef(idex + 1).toUInt(&ok);
+ if (ok) {
+ if (num >= maxBackups) {
+ QFile::remove(fi.filePath());
+ } else {
+ maxBackupFound = qMax(maxBackupFound, num);
+ }
+ }
+ }
+ }
+ }
+
+ // Next, rename max-1 to max, max-2 to max-1, etc.
+ QString to = sTemplate.arg(maxBackupFound + 1);
+ for (int i = maxBackupFound; i > 0; i--) {
+ QString from = sTemplate.arg(i);
+ // qCDebug(KCOREADDONS_DEBUG) << "KBackup renaming " << from << " to " << to;
+ QFile::rename(from, to);
+ to = from;
+ }
+
+ // Finally create most recent backup by copying the file to backup number 1.
+ // qCDebug(KCOREADDONS_DEBUG) << "KBackup copying " << qFilename << " to " << sTemplate.arg(1);
+ return QFile::copy(qFilename, sTemplate.arg(1));
+}
+
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1999 Waldo Bastian <bastian@kde.org>
+ SPDX-FileCopyrightText: 2006 Jaison Lee <lee.jaison@gmail.com>
+ SPDX-FileCopyrightText: 2011 Romain Perier <bambi@ubuntu.com>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KBACKUP_H
+#define KBACKUP_H
+
+#include <QString>
+#include <kcoreaddons_export.h>
+
+/**
+ * @namespace KBackup
+ * Provides utility functions for backup of files.
+ */
+namespace KBackup
+{
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 75)
+/**
+ * @brief Function to create a backup file before saving.
+ *
+ * @warning This code lost its former functionality during the conversion from KDELibs4 to KDE Framrworks 5.
+ * It now only forwards and calls
+ * @code
+KBackup::simpleBackupFile(filename, backupDir, QStringLiteral("~")));
+ * @endcode
+ * To restore the former functionality for your software, which read
+ * the backup type (simple or numbered), extension string, and maximum
+ * number of backup files from the user's global configuration,
+ * you could use code like this:
+ * @code
+ KConfigGroup configGroup(KSharedConfig::openConfig(), "Backups"); // look in the Backups section
+ const QString type = configGroup.readEntry("Type", QStringLiteral("simple"));
+ const QString extension = configGroup.readEntry("Extension", QStringLiteral("~"));
+ bool success = false;
+ if (type == QLatin1String("numbered")) {
+ const int maxNumber = configGroup.readEntry("MaxBackups", 10);
+ success = numberedBackupFile(filename, backupDir, extension, maxNumber);
+ } else {
+ success = simpleBackupFile(filename, backupDir, extension);
+ }
+ * @endcode
+ *
+ * @param filename the file to backup
+ * @param backupDir optional directory where to save the backup file in.
+ * If empty (the default), the backup will be in the same directory as @p filename.
+ * @return true if successful, or false if an error has occurred.
+ *
+ * @deprecated Since 5.0, use simpleBackupFile() or numberedBackupFile() directly
+ */
+KCOREADDONS_EXPORT
+KCOREADDONS_DEPRECATED_VERSION_BELATED(5, 75, 5, 0, "Use simpleBackupFile() or numberedBackupFile() directly")
+bool backupFile(const QString &filename, const QString &backupDir = QString());
+#endif
+
+/**
+ * @brief Function to create a backup file for a given filename.
+ *
+ * This function creates a backup file from the given filename.
+ * You can use this method even if you don't use KSaveFile.
+ * @param filename the file to backup
+ * @param backupDir optional directory where to save the backup file in.
+ * If empty (the default), the backup will be in the same directory as @p filename.
+ * @param backupExtension the extension to append to @p filename, "~" by default.
+ * @return true if successful, or false if an error has occurred.
+ */
+KCOREADDONS_EXPORT bool simpleBackupFile(const QString &filename, const QString &backupDir = QString(), const QString &backupExtension = QStringLiteral("~"));
+
+/**
+ * @brief Function to create a backup file for a given filename.
+ *
+ * This function creates a series of numbered backup files from the
+ * given filename.
+ *
+ * The backup file names will be of the form:
+ * \<name\>.\<number\>\<extension\>
+ * for instance
+ * \verbatim chat.3.log \endverbatim
+ *
+ * The new backup file will be have the backup number 1.
+ * Each existing backup file will have its number incremented by 1.
+ * Any backup files with numbers greater than the maximum number
+ * permitted (@p maxBackups) will be removed.
+ * You can use this method even if you don't use KSaveFile.
+ *
+ * @param filename the file to backup
+ * @param backupDir optional directory where to save the backup file in.
+ * If empty (the default), the backup will be in the same directory as
+ * @p filename.
+ * @param backupExtension the extension to append to @p filename,
+ * which is "~" by default. Do not use an extension containing digits.
+ * @param maxBackups the maximum number of backup files permitted.
+ * For best performance a small number (10) is recommended.
+ * @return true if successful, or false if an error has occurred.
+ */
+KCOREADDONS_EXPORT bool numberedBackupFile(const QString &filename,
+ const QString &backupDir = QString(),
+ const QString &backupExtension = QStringLiteral("~"),
+ const uint maxBackups = 10);
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 75)
+/**
+ * @brief Function to create an rcs backup file for a given filename.
+ *
+ * This function creates a rcs-formatted backup file from the
+ * given filename.
+ *
+ * The backup file names will be of the form:
+ * \<name\>,v
+ * for instance
+ * \verbatim photo.jpg,v \endverbatim
+ *
+ * The new backup file will be in RCS format.
+ * Each existing backup file will be committed as a new revision.
+ * You can use this method even if you don't use KSaveFile.
+ *
+ * @param filename the file to backup
+ * @param backupDir optional directory where to save the backup file in.
+ * If empty (the default), the backup will be in the same directory as
+ * @p filename.
+ * @param backupMessage is the RCS commit message for this revision.
+ * @return true if successful, or false if an error has occurred.
+ * @deprecated Since 5.75, no known users
+ */
+KCOREADDONS_EXPORT
+KCOREADDONS_DEPRECATED_VERSION(5, 75, "No known users")
+bool rcsBackupFile(const QString &filename, const QString &backupDir = QString(), const QString &backupMessage = QString());
+#endif
+}
+
+#endif
--- /dev/null
+/* This file is part of the KDE libraries
+ SPDX-FileCopyrightText: 1998 Sven Radej <sven@lisa.exp.univie.ac.at>
+ SPDX-FileCopyrightText: 2006 Dirk Mueller <mueller@kde.org>
+ SPDX-FileCopyrightText: 2007 Flavio Castelli <flavio.castelli@gmail.com>
+ SPDX-FileCopyrightText: 2008 Rafal Rzepecki <divided.mind@gmail.com>
+ SPDX-FileCopyrightText: 2010 David Faure <faure@kde.org>
+ SPDX-FileCopyrightText: 2020 Harald Sitter <sitter@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+// CHANGES:
+// Jul 30, 2008 - Don't follow symlinks when recursing to avoid loops (Rafal)
+// Aug 6, 2007 - KDirWatch::WatchModes support complete, flags work fine also
+// when using FAMD (Flavio Castelli)
+// Aug 3, 2007 - Handled KDirWatch::WatchModes flags when using inotify, now
+// recursive and file monitoring modes are implemented (Flavio Castelli)
+// Jul 30, 2007 - Substituted addEntry boolean params with KDirWatch::WatchModes
+// flag (Flavio Castelli)
+// Oct 4, 2005 - Inotify support (Dirk Mueller)
+// February 2002 - Add file watching and remote mount check for STAT
+// Mar 30, 2001 - Native support for Linux dir change notification.
+// Jan 28, 2000 - Usage of FAM service on IRIX (Josef.Weidendorfer@in.tum.de)
+// May 24. 1998 - List of times introduced, and some bugs are fixed. (sven)
+// May 23. 1998 - Removed static pointer - you can have more instances.
+// It was Needed for KRegistry. KDirWatch now emits signals and doesn't
+// call (or need) KFM. No more URL's - just plain paths. (sven)
+// Mar 29. 1998 - added docs, stop/restart for particular Dirs and
+// deep copies for list of dirs. (sven)
+// Mar 28. 1998 - Created. (sven)
+
+#include "kdirwatch.h"
+#include "kcoreaddons_debug.h"
+#include "kdirwatch_p.h"
+#include "kfilesystemtype.h"
+#include "knetworkmounts.h"
+
+#include <io/config-kdirwatch.h>
+
+#include <QCoreApplication>
+#include <QDir>
+#include <QFile>
+#include <QLoggingCategory>
+#include <QSocketNotifier>
+#include <QThread>
+#include <QThreadStorage>
+#include <QTimer>
+#include <assert.h>
+#include <cerrno>
+#include <sys/stat.h>
+
+#include <qplatformdefs.h> // QT_LSTAT, QT_STAT, QT_STATBUF
+
+#include <stdlib.h>
+#include <string.h>
+
+#if HAVE_SYS_INOTIFY_H
+#include <fcntl.h>
+#include <sys/inotify.h>
+#include <unistd.h>
+
+#ifndef IN_DONT_FOLLOW
+#define IN_DONT_FOLLOW 0x02000000
+#endif
+
+#ifndef IN_ONLYDIR
+#define IN_ONLYDIR 0x01000000
+#endif
+
+// debug
+#include <sys/ioctl.h>
+
+#include <sys/utsname.h>
+
+#endif // HAVE_SYS_INOTIFY_H
+
+Q_DECLARE_LOGGING_CATEGORY(KDIRWATCH)
+// logging category for this framework, default: log stuff >= warning
+Q_LOGGING_CATEGORY(KDIRWATCH, "kf.coreaddons.kdirwatch", QtWarningMsg)
+
+// set this to true for much more verbose debug output
+static bool s_verboseDebug = false;
+
+static QThreadStorage<KDirWatchPrivate *> dwp_self;
+static KDirWatchPrivate *createPrivate()
+{
+ if (!dwp_self.hasLocalData()) {
+ dwp_self.setLocalData(new KDirWatchPrivate);
+ }
+ return dwp_self.localData();
+}
+static void destroyPrivate()
+{
+ dwp_self.localData()->deleteLater();
+ dwp_self.setLocalData(nullptr);
+}
+
+// Convert a string into a watch Method
+static KDirWatch::Method methodFromString(const QByteArray &method)
+{
+ if (method == "Fam") {
+ return KDirWatch::FAM;
+ } else if (method == "Stat") {
+ return KDirWatch::Stat;
+ } else if (method == "QFSWatch") {
+ return KDirWatch::QFSWatch;
+ } else {
+#if HAVE_SYS_INOTIFY_H
+ // inotify supports delete+recreate+modify, which QFSWatch doesn't support
+ return KDirWatch::INotify;
+#else
+ return KDirWatch::QFSWatch;
+#endif
+ }
+}
+
+static const char *methodToString(KDirWatch::Method method)
+{
+ switch (method) {
+ case KDirWatch::FAM:
+ return "Fam";
+ case KDirWatch::INotify:
+ return "INotify";
+ case KDirWatch::Stat:
+ return "Stat";
+ case KDirWatch::QFSWatch:
+ return "QFSWatch";
+ }
+ // not reached
+ return nullptr;
+}
+
+static const char s_envNfsPoll[] = "KDIRWATCH_NFSPOLLINTERVAL";
+static const char s_envPoll[] = "KDIRWATCH_POLLINTERVAL";
+static const char s_envMethod[] = "KDIRWATCH_METHOD";
+static const char s_envNfsMethod[] = "KDIRWATCH_NFSMETHOD";
+
+//
+// Class KDirWatchPrivate (singleton)
+//
+
+/* All entries (files/directories) to be watched in the
+ * application (coming from multiple KDirWatch instances)
+ * are registered in a single KDirWatchPrivate instance.
+ *
+ * At the moment, the following methods for file watching
+ * are supported:
+ * - Polling: All files to be watched are polled regularly
+ * using stat (more precise: QFileInfo.lastModified()).
+ * The polling frequency is determined from global kconfig
+ * settings, defaulting to 500 ms for local directories
+ * and 5000 ms for remote mounts
+ * - FAM (File Alternation Monitor): first used on IRIX, SGI
+ * has ported this method to LINUX. It uses a kernel part
+ * (IMON, sending change events to /dev/imon) and a user
+ * level daemon (fam), to which applications connect for
+ * notification of file changes. For NFS, the fam daemon
+ * on the NFS server machine is used; if IMON is not built
+ * into the kernel, fam uses polling for local files.
+ * - INOTIFY: In LINUX 2.6.13, inode change notification was
+ * introduced. You're now able to watch arbitrary inode's
+ * for changes, and even get notification when they're
+ * unmounted.
+ */
+
+KDirWatchPrivate::KDirWatchPrivate()
+ : timer()
+ , freq(3600000)
+ , // 1 hour as upper bound
+ statEntries(0)
+ , delayRemove(false)
+ , rescan_all(false)
+ , rescan_timer()
+ ,
+#if HAVE_SYS_INOTIFY_H
+ mSn(nullptr)
+ ,
+#endif
+ _isStopped(false)
+ , m_references(0)
+{
+ // Debug unittest on CI
+ if (qAppName() == QLatin1String("kservicetest") || qAppName() == QLatin1String("filetypestest")) {
+ s_verboseDebug = true;
+ }
+ timer.setObjectName(QStringLiteral("KDirWatchPrivate::timer"));
+ connect(&timer, &QTimer::timeout, this, &KDirWatchPrivate::slotRescan);
+
+ m_nfsPollInterval = qEnvironmentVariableIsSet(s_envNfsPoll) ? qEnvironmentVariableIntValue(s_envNfsPoll) : 5000;
+ m_PollInterval = qEnvironmentVariableIsSet(s_envPoll) ? qEnvironmentVariableIntValue(s_envPoll) : 500;
+
+ m_preferredMethod = methodFromString(qEnvironmentVariableIsSet(s_envMethod) ? qgetenv(s_envMethod) : "inotify");
+ // The nfs method defaults to the normal (local) method
+ m_nfsPreferredMethod = methodFromString(qEnvironmentVariableIsSet(s_envNfsMethod) ? qgetenv(s_envNfsMethod) : "Fam");
+
+ QList<QByteArray> availableMethods;
+
+ availableMethods << "Stat";
+
+ // used for FAM and inotify
+ rescan_timer.setObjectName(QStringLiteral("KDirWatchPrivate::rescan_timer"));
+ rescan_timer.setSingleShot(true);
+ connect(&rescan_timer, &QTimer::timeout, this, &KDirWatchPrivate::slotRescan);
+
+#if HAVE_FAM
+ availableMethods << "FAM";
+ use_fam = true;
+ sn = nullptr;
+#endif
+
+#if HAVE_SYS_INOTIFY_H
+ supports_inotify = true;
+
+ m_inotify_fd = inotify_init();
+
+ if (m_inotify_fd <= 0) {
+ qCDebug(KDIRWATCH) << "Can't use Inotify, kernel doesn't support it:" << strerror(errno);
+ supports_inotify = false;
+ }
+
+ // qCDebug(KDIRWATCH) << "INotify available: " << supports_inotify;
+ if (supports_inotify) {
+ availableMethods << "INotify";
+ (void)fcntl(m_inotify_fd, F_SETFD, FD_CLOEXEC);
+
+ mSn = new QSocketNotifier(m_inotify_fd, QSocketNotifier::Read, this);
+ connect(mSn, SIGNAL(activated(int)), this, SLOT(inotifyEventReceived()));
+ }
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ availableMethods << "QFileSystemWatcher";
+ fsWatcher = nullptr;
+#endif
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Available methods: " << availableMethods << "preferred=" << methodToString(m_preferredMethod);
+ }
+}
+
+// This is called on app exit (deleted by QThreadStorage)
+KDirWatchPrivate::~KDirWatchPrivate()
+{
+ timer.stop();
+
+#if HAVE_FAM
+ if (use_fam && sn) {
+ FAMClose(&fc);
+ }
+#endif
+#if HAVE_SYS_INOTIFY_H
+ if (supports_inotify) {
+ QT_CLOSE(m_inotify_fd);
+ }
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ delete fsWatcher;
+#endif
+}
+
+void KDirWatchPrivate::inotifyEventReceived()
+{
+#if HAVE_SYS_INOTIFY_H
+ if (!supports_inotify) {
+ return;
+ }
+
+ int pending = -1;
+ int offsetStartRead = 0; // where we read into buffer
+ char buf[8192];
+ assert(m_inotify_fd > -1);
+ ioctl(m_inotify_fd, FIONREAD, &pending);
+
+ while (pending > 0) {
+ const int bytesToRead = qMin<int>(pending, sizeof(buf) - offsetStartRead);
+
+ int bytesAvailable = read(m_inotify_fd, &buf[offsetStartRead], bytesToRead);
+ pending -= bytesAvailable;
+ bytesAvailable += offsetStartRead;
+ offsetStartRead = 0;
+
+ int offsetCurrent = 0;
+ while (bytesAvailable >= int(sizeof(struct inotify_event))) {
+ const struct inotify_event *const event = reinterpret_cast<inotify_event *>(&buf[offsetCurrent]);
+ const int eventSize = sizeof(struct inotify_event) + event->len;
+ if (bytesAvailable < eventSize) {
+ break;
+ }
+
+ bytesAvailable -= eventSize;
+ offsetCurrent += eventSize;
+
+ QString path;
+ // strip trailing null chars, see inotify_event documentation
+ // these must not end up in the final QString version of path
+ int len = event->len;
+ while (len > 1 && !event->name[len - 1]) {
+ --len;
+ }
+ QByteArray cpath(event->name, len);
+ if (len) {
+ path = QFile::decodeName(cpath);
+ }
+
+ if (!path.isEmpty() && isNoisyFile(cpath.data())) {
+ continue;
+ }
+
+ // Is set to true if the new event is a directory, false otherwise. This prevents a stat call in clientsForFileOrDir
+ const bool isDir = (event->mask & (IN_ISDIR));
+
+ Entry *e = m_inotify_wd_to_entry.value(event->wd);
+ if (!e) {
+ continue;
+ }
+ const bool wasDirty = e->dirty;
+ e->dirty = true;
+
+ const QString tpath = e->path + QLatin1Char('/') + path;
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH).nospace() << "got event 0x" << qPrintable(QString::number(event->mask, 16)) << " for " << e->path;
+ }
+
+ if (event->mask & IN_DELETE_SELF) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "-->got deleteself signal for" << e->path;
+ }
+ e->m_status = NonExistent;
+ m_inotify_wd_to_entry.remove(e->wd);
+ e->wd = -1;
+ e->m_ctime = invalid_ctime;
+ emitEvent(e, Deleted, e->path);
+ // If the parent dir was already watched, tell it something changed
+ Entry *parentEntry = entry(e->parentDirectory());
+ if (parentEntry) {
+ parentEntry->dirty = true;
+ }
+ // Add entry to parent dir to notice if the entry gets recreated
+ addEntry(nullptr, e->parentDirectory(), e, true /*isDir*/);
+ }
+ if (event->mask & IN_IGNORED) {
+ // Causes bug #207361 with kernels 2.6.31 and 2.6.32!
+ // e->wd = -1;
+ }
+ if (event->mask & (IN_CREATE | IN_MOVED_TO)) {
+ Entry *sub_entry = e->findSubEntry(tpath);
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "-->got CREATE signal for" << (tpath) << "sub_entry=" << sub_entry;
+ qCDebug(KDIRWATCH) << *e;
+ }
+
+ // The code below is very similar to the one in checkFAMEvent...
+ if (sub_entry) {
+ // We were waiting for this new file/dir to be created
+ sub_entry->dirty = true;
+ rescan_timer.start(0); // process this asap, to start watching that dir
+ } else if (e->isDir && !e->m_clients.empty()) {
+ const QList<const Client *> clients = e->inotifyClientsForFileOrDir(isDir);
+ // See discussion in addEntry for why we don't addEntry for individual
+ // files in WatchFiles mode with inotify.
+ if (isDir) {
+ for (const Client *client : clients) {
+ addEntry(client->instance, tpath, nullptr, isDir, isDir ? client->m_watchModes : KDirWatch::WatchDirOnly);
+ }
+ }
+ if (!clients.isEmpty()) {
+ emitEvent(e, Created, tpath);
+ qCDebug(KDIRWATCH).nospace() << clients.count() << " instance(s) monitoring the new " << (isDir ? "dir " : "file ") << tpath;
+ }
+ e->m_pendingFileChanges.append(e->path);
+ if (!rescan_timer.isActive()) {
+ rescan_timer.start(m_PollInterval); // singleshot
+ }
+ }
+ }
+ if (event->mask & (IN_DELETE | IN_MOVED_FROM)) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "-->got DELETE signal for" << tpath;
+ }
+ if ((e->isDir) && (!e->m_clients.empty())) {
+ // A file in this directory has been removed. It wasn't an explicitly
+ // watched file as it would have its own watch descriptor, so
+ // no addEntry/ removeEntry bookkeeping should be required. Emit
+ // the event immediately if any clients are interested.
+ KDirWatch::WatchModes flag = isDir ? KDirWatch::WatchSubDirs : KDirWatch::WatchFiles;
+ int counter = 0;
+ for (const Client &client : e->m_clients) {
+ if (client.m_watchModes & flag) {
+ counter++;
+ }
+ }
+ if (counter != 0) {
+ emitEvent(e, Deleted, tpath);
+ }
+ }
+ }
+ if (event->mask & (IN_MODIFY | IN_ATTRIB)) {
+ if ((e->isDir) && (!e->m_clients.empty())) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "-->got MODIFY signal for" << (tpath);
+ }
+ // A file in this directory has been changed. No
+ // addEntry/ removeEntry bookkeeping should be required.
+ // Add the path to the list of pending file changes if
+ // there are any interested clients.
+ // QT_STATBUF stat_buf;
+ // QByteArray tpath = QFile::encodeName(e->path+'/'+path);
+ // QT_STAT(tpath, &stat_buf);
+ // bool isDir = S_ISDIR(stat_buf.st_mode);
+
+ // The API doc is somewhat vague as to whether we should emit
+ // dirty() for implicitly watched files when WatchFiles has
+ // not been specified - we'll assume they are always interested,
+ // regardless.
+ // Don't worry about duplicates for the time
+ // being; this is handled in slotRescan.
+ e->m_pendingFileChanges.append(tpath);
+ // Avoid stat'ing the directory if only an entry inside it changed.
+ e->dirty = (wasDirty || (path.isEmpty() && (event->mask & IN_ATTRIB)));
+ }
+ }
+
+ if (!rescan_timer.isActive()) {
+ rescan_timer.start(m_PollInterval); // singleshot
+ }
+ }
+ if (bytesAvailable > 0) {
+ // copy partial event to beginning of buffer
+ memmove(buf, &buf[offsetCurrent], bytesAvailable);
+ offsetStartRead = bytesAvailable;
+ }
+ }
+#endif
+}
+
+KDirWatchPrivate::Entry::~Entry()
+{
+}
+
+/* In FAM mode, only entries which are marked dirty are scanned.
+ * We first need to mark all yet nonexistent, but possible created
+ * entries as dirty...
+ */
+void KDirWatchPrivate::Entry::propagate_dirty()
+{
+ for (Entry *sub_entry : qAsConst(m_entries)) {
+ if (!sub_entry->dirty) {
+ sub_entry->dirty = true;
+ sub_entry->propagate_dirty();
+ }
+ }
+}
+
+/* A KDirWatch instance is interested in getting events for
+ * this file/Dir entry.
+ */
+void KDirWatchPrivate::Entry::addClient(KDirWatch *instance, KDirWatch::WatchModes watchModes)
+{
+ if (instance == nullptr) {
+ return;
+ }
+
+ for (Client &client : m_clients) {
+ if (client.instance == instance) {
+ client.count++;
+ client.m_watchModes = watchModes;
+ return;
+ }
+ }
+
+ m_clients.emplace_back(instance, watchModes);
+}
+
+void KDirWatchPrivate::Entry::removeClient(KDirWatch *instance)
+{
+ auto it = m_clients.begin();
+ const auto end = m_clients.end();
+ for (; it != end; ++it) {
+ Client &client = *it;
+ if (client.instance == instance) {
+ client.count--;
+ if (client.count == 0) {
+ m_clients.erase(it);
+ }
+ return;
+ }
+ }
+}
+
+/* get number of clients */
+int KDirWatchPrivate::Entry::clientCount() const
+{
+ int clients = 0;
+ for (const Client &client : m_clients) {
+ clients += client.count;
+ }
+
+ return clients;
+}
+
+QString KDirWatchPrivate::Entry::parentDirectory() const
+{
+ return QDir::cleanPath(path + QLatin1String("/.."));
+}
+
+QList<const KDirWatchPrivate::Client *> KDirWatchPrivate::Entry::clientsForFileOrDir(const QString &tpath, bool *isDir) const
+{
+ QList<const Client *> ret;
+ QFileInfo fi(tpath);
+ if (fi.exists()) {
+ *isDir = fi.isDir();
+ const KDirWatch::WatchModes flag = *isDir ? KDirWatch::WatchSubDirs : KDirWatch::WatchFiles;
+ for (const Client &client : m_clients) {
+ if (client.m_watchModes & flag) {
+ ret.append(&client);
+ }
+ }
+ } else {
+ // Happens frequently, e.g. ERROR: couldn't stat "/home/dfaure/.viminfo.tmp"
+ // qCDebug(KDIRWATCH) << "ERROR: couldn't stat" << tpath;
+ // In this case isDir is not set, but ret is empty anyway
+ // so isDir won't be used.
+ }
+ return ret;
+}
+
+// inotify specific function that doesn't call KDE::stat to figure out if we have a file or folder.
+// isDir is determined through inotify's "IN_ISDIR" flag in KDirWatchPrivate::inotifyEventReceived
+QList<const KDirWatchPrivate::Client *> KDirWatchPrivate::Entry::inotifyClientsForFileOrDir(bool isDir) const
+{
+ QList<const Client *> ret;
+ const KDirWatch::WatchModes flag = isDir ? KDirWatch::WatchSubDirs : KDirWatch::WatchFiles;
+ for (const Client &client : m_clients) {
+ if (client.m_watchModes & flag) {
+ ret.append(&client);
+ }
+ }
+ return ret;
+}
+
+QDebug operator<<(QDebug debug, const KDirWatchPrivate::Entry &entry)
+{
+ debug.nospace() << "[ Entry for " << entry.path << ", " << (entry.isDir ? "dir" : "file");
+ if (entry.m_status == KDirWatchPrivate::NonExistent) {
+ debug << ", non-existent";
+ }
+ debug << ", using "
+ << ((entry.m_mode == KDirWatchPrivate::FAMMode) ? "FAM"
+ : (entry.m_mode == KDirWatchPrivate::INotifyMode) ? "INotify"
+ : (entry.m_mode == KDirWatchPrivate::QFSWatchMode) ? "QFSWatch"
+ : (entry.m_mode == KDirWatchPrivate::StatMode) ? "Stat"
+ : "Unknown Method");
+#if HAVE_SYS_INOTIFY_H
+ if (entry.m_mode == KDirWatchPrivate::INotifyMode) {
+ debug << " inotify_wd=" << entry.wd;
+ }
+#endif
+ debug << ", has " << entry.m_clients.size() << " clients";
+ debug.space();
+ if (!entry.m_entries.isEmpty()) {
+ debug << ", nonexistent subentries:";
+ for (KDirWatchPrivate::Entry *subEntry : qAsConst(entry.m_entries)) {
+ debug << subEntry << subEntry->path;
+ }
+ }
+ debug << ']';
+ return debug;
+}
+
+KDirWatchPrivate::Entry *KDirWatchPrivate::entry(const QString &_path)
+{
+ // we only support absolute paths
+ if (_path.isEmpty() || QDir::isRelativePath(_path)) {
+ return nullptr;
+ }
+
+ QString path(_path);
+
+ if (path.length() > 1 && path.endsWith(QLatin1Char('/'))) {
+ path.chop(1);
+ }
+
+ EntryMap::Iterator it = m_mapEntries.find(path);
+ if (it == m_mapEntries.end()) {
+ return nullptr;
+ } else {
+ return &(*it);
+ }
+}
+
+// set polling frequency for a entry and adjust global freq if needed
+void KDirWatchPrivate::useFreq(Entry *e, int newFreq)
+{
+ e->freq = newFreq;
+
+ // a reasonable frequency for the global polling timer
+ if (e->freq < freq) {
+ freq = e->freq;
+ if (timer.isActive()) {
+ timer.start(freq);
+ }
+ qCDebug(KDIRWATCH) << "Global Poll Freq is now" << freq << "msec";
+ }
+}
+
+#if HAVE_FAM
+// setup FAM notification, returns false if not possible
+bool KDirWatchPrivate::useFAM(Entry *e)
+{
+ if (!use_fam) {
+ return false;
+ }
+
+ if (!sn) {
+ if (FAMOpen(&fc) == 0) {
+ sn = new QSocketNotifier(FAMCONNECTION_GETFD(&fc), QSocketNotifier::Read, this);
+ connect(sn, SIGNAL(activated(int)), this, SLOT(famEventReceived()));
+ } else {
+ use_fam = false;
+ return false;
+ }
+ }
+
+ // handle FAM events to avoid deadlock
+ // (FAM sends back all files in a directory when monitoring)
+ famEventReceived();
+
+ e->m_mode = FAMMode;
+ e->dirty = false;
+ e->m_famReportedSeen = false;
+
+ bool startedFAMMonitor = false;
+
+ if (e->isDir) {
+ if (e->m_status == NonExistent) {
+ // If the directory does not exist we watch the parent directory
+ addEntry(nullptr, e->parentDirectory(), e, true);
+ } else {
+ int res = FAMMonitorDirectory(&fc, QFile::encodeName(e->path).data(), &(e->fr), e);
+ startedFAMMonitor = true;
+ if (res < 0) {
+ e->m_mode = UnknownMode;
+ use_fam = false;
+ delete sn;
+ sn = nullptr;
+ return false;
+ }
+ qCDebug(KDIRWATCH).nospace() << " Setup FAM (Req " << FAMREQUEST_GETREQNUM(&(e->fr)) << ") for " << e->path;
+ }
+ } else {
+ if (e->m_status == NonExistent) {
+ // If the file does not exist we watch the directory
+ addEntry(nullptr, QFileInfo(e->path).absolutePath(), e, true);
+ } else {
+ int res = FAMMonitorFile(&fc, QFile::encodeName(e->path).data(), &(e->fr), e);
+ startedFAMMonitor = true;
+ if (res < 0) {
+ e->m_mode = UnknownMode;
+ use_fam = false;
+ delete sn;
+ sn = nullptr;
+ return false;
+ }
+
+ qCDebug(KDIRWATCH).nospace() << " Setup FAM (Req " << FAMREQUEST_GETREQNUM(&(e->fr)) << ") for " << e->path;
+ }
+ }
+
+ // handle FAM events to avoid deadlock
+ // (FAM sends back all files in a directory when monitoring)
+ const int iterationCap = 80;
+ for (int i = 0; i <= iterationCap; ++i) { // we'll not wait forever; blocking for 4s seems plenty
+ famEventReceived();
+ // NB: check use_fam, if fam is defunct event receiving might disable fam support!
+ if (use_fam && startedFAMMonitor && !e->m_famReportedSeen) {
+ // 50 is ~half the time it takes to setup a watch. If gamin's latency
+ // gets better, this can be reduced.
+ QThread::msleep(50);
+ } else if (use_fam && i == iterationCap) {
+ disableFAM();
+ return false;
+ } else {
+ break;
+ }
+ }
+
+ return true;
+}
+#endif
+
+#if HAVE_SYS_INOTIFY_H
+// setup INotify notification, returns false if not possible
+bool KDirWatchPrivate::useINotify(Entry *e)
+{
+ e->wd = -1;
+ e->dirty = false;
+
+ if (!supports_inotify) {
+ return false;
+ }
+
+ e->m_mode = INotifyMode;
+
+ if (e->m_status == NonExistent) {
+ addEntry(nullptr, e->parentDirectory(), e, true);
+ return true;
+ }
+
+ // May as well register for almost everything - it's free!
+ int mask = IN_DELETE | IN_DELETE_SELF | IN_CREATE | IN_MOVE | IN_MOVE_SELF | IN_DONT_FOLLOW | IN_MOVED_FROM | IN_MODIFY | IN_ATTRIB;
+
+ if ((e->wd = inotify_add_watch(m_inotify_fd, QFile::encodeName(e->path).data(), mask)) != -1) {
+ m_inotify_wd_to_entry.insert(e->wd, e);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "inotify successfully used for monitoring" << e->path << "wd=" << e->wd;
+ }
+ return true;
+ }
+
+ if (errno == ENOSPC) {
+ // Inotify max_user_watches was reached (/proc/sys/fs/inotify/max_user_watches)
+ // See man inotify_add_watch, https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers
+ qCWarning(KDIRWATCH) << "inotify failed for monitoring" << e->path << "\n"
+ << "Because it reached its max_user_watches,\n"
+ << "you can increase the maximum number of file watches per user,\n"
+ << "by setting an appropriate fs.inotify.max_user_watches parameter in your /etc/sysctl.conf";
+ } else {
+ qCDebug(KDIRWATCH) << "inotify failed for monitoring" << e->path << ":" << strerror(errno) << " (errno:" << errno << ")";
+ }
+ return false;
+}
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+bool KDirWatchPrivate::useQFSWatch(Entry *e)
+{
+ e->m_mode = QFSWatchMode;
+ e->dirty = false;
+
+ if (e->m_status == NonExistent) {
+ addEntry(nullptr, e->parentDirectory(), e, true /*isDir*/);
+ return true;
+ }
+
+ // qCDebug(KDIRWATCH) << "fsWatcher->addPath" << e->path;
+ if (!fsWatcher) {
+ fsWatcher = new QFileSystemWatcher();
+ connect(fsWatcher, &QFileSystemWatcher::directoryChanged, this, &KDirWatchPrivate::fswEventReceived);
+ connect(fsWatcher, &QFileSystemWatcher::fileChanged, this, &KDirWatchPrivate::fswEventReceived);
+ }
+ fsWatcher->addPath(e->path);
+ return true;
+}
+#endif
+
+bool KDirWatchPrivate::useStat(Entry *e)
+{
+ if (KFileSystemType::fileSystemType(e->path) == KFileSystemType::Nfs) { // TODO: or Smbfs?
+ useFreq(e, m_nfsPollInterval);
+ } else {
+ useFreq(e, m_PollInterval);
+ }
+
+ if (e->m_mode != StatMode) {
+ e->m_mode = StatMode;
+ statEntries++;
+
+ if (statEntries == 1) {
+ // if this was first STAT entry (=timer was stopped)
+ timer.start(freq); // then start the timer
+ qCDebug(KDIRWATCH) << " Started Polling Timer, freq " << freq;
+ }
+ }
+
+ qCDebug(KDIRWATCH) << " Setup Stat (freq " << e->freq << ") for " << e->path;
+
+ return true;
+}
+
+/* If <instance> !=0, this KDirWatch instance wants to watch at <_path>,
+ * providing in <isDir> the type of the entry to be watched.
+ * Sometimes, entries are dependent on each other: if <sub_entry> !=0,
+ * this entry needs another entry to watch itself (when notExistent).
+ */
+void KDirWatchPrivate::addEntry(KDirWatch *instance, const QString &_path, Entry *sub_entry, bool isDir, KDirWatch::WatchModes watchModes)
+{
+ QString path(_path);
+ if (path.startsWith(QLatin1String(":/"))) {
+ qCWarning(KDIRWATCH) << "Cannot watch QRC-like path" << path;
+ return;
+ }
+ if (path.isEmpty()
+#ifndef Q_OS_WIN
+ || path == QLatin1String("/dev")
+ || (path.startsWith(QLatin1String("/dev/")) && !path.startsWith(QLatin1String("/dev/.")) && !path.startsWith(QLatin1String("/dev/shm")))
+#endif
+ ) {
+ return; // Don't even go there.
+ }
+
+ if (path.length() > 1 && path.endsWith(QLatin1Char('/'))) {
+ path.chop(1);
+ }
+
+ EntryMap::Iterator it = m_mapEntries.find(path);
+ if (it != m_mapEntries.end()) {
+ if (sub_entry) {
+ (*it).m_entries.append(sub_entry);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Added already watched Entry" << path << "(for" << sub_entry->path << ")";
+ }
+ } else {
+ (*it).addClient(instance, watchModes);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Added already watched Entry" << path << "(now" << (*it).clientCount() << "clients)"
+ << QStringLiteral("[%1]").arg(instance->objectName());
+ }
+ }
+ return;
+ }
+
+ // we have a new path to watch
+
+ QT_STATBUF stat_buf;
+ bool exists = (QT_STAT(QFile::encodeName(path).constData(), &stat_buf) == 0);
+
+ EntryMap::iterator newIt = m_mapEntries.insert(path, Entry());
+ // the insert does a copy, so we have to use <e> now
+ Entry *e = &(*newIt);
+
+ if (exists) {
+ e->isDir = (stat_buf.st_mode & QT_STAT_MASK) == QT_STAT_DIR;
+
+#ifndef Q_OS_WIN
+ if (e->isDir && !isDir) {
+ if (QT_LSTAT(QFile::encodeName(path).constData(), &stat_buf) == 0) {
+ if ((stat_buf.st_mode & QT_STAT_MASK) == QT_STAT_LNK) {
+ // if it's a symlink, don't follow it
+ e->isDir = false;
+ }
+ }
+ }
+#endif
+
+ if (e->isDir && !isDir) {
+ qCWarning(KCOREADDONS_DEBUG) << "KDirWatch:" << path << "is a directory. Use addDir!";
+ } else if (!e->isDir && isDir) {
+ qCWarning(KCOREADDONS_DEBUG) << "KDirWatch:" << path << "is a file. Use addFile!";
+ }
+
+ if (!e->isDir && (watchModes != KDirWatch::WatchDirOnly)) {
+ qCWarning(KCOREADDONS_DEBUG) << "KDirWatch:" << path
+ << "is a file. You can't use recursive or "
+ "watchFiles options";
+ watchModes = KDirWatch::WatchDirOnly;
+ }
+
+#ifdef Q_OS_WIN
+ // ctime is the 'creation time' on windows - use mtime instead
+ e->m_ctime = stat_buf.st_mtime;
+#else
+ e->m_ctime = stat_buf.st_ctime;
+#endif
+ e->m_status = Normal;
+ e->m_nlink = stat_buf.st_nlink;
+ e->m_ino = stat_buf.st_ino;
+ } else {
+ e->isDir = isDir;
+ e->m_ctime = invalid_ctime;
+ e->m_status = NonExistent;
+ e->m_nlink = 0;
+ e->m_ino = 0;
+ }
+
+ e->path = path;
+ if (sub_entry) {
+ e->m_entries.append(sub_entry);
+ } else {
+ e->addClient(instance, watchModes);
+ }
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH).nospace() << "Added " << (e->isDir ? "Dir " : "File ") << path << (e->m_status == NonExistent ? " NotExisting" : "") << " for "
+ << (sub_entry ? sub_entry->path : QString()) << " [" << (instance ? instance->objectName() : QString()) << "]";
+ }
+
+ // now setup the notification method
+ e->m_mode = UnknownMode;
+ e->msecLeft = 0;
+
+ if (isNoisyFile(QFile::encodeName(path).data())) {
+ return;
+ }
+
+ if (exists && e->isDir && (watchModes != KDirWatch::WatchDirOnly)) {
+ QFlags<QDir::Filter> filters = QDir::NoDotAndDotDot;
+
+ if ((watchModes & KDirWatch::WatchSubDirs) && (watchModes & KDirWatch::WatchFiles)) {
+ filters |= (QDir::Dirs | QDir::Files);
+ } else if (watchModes & KDirWatch::WatchSubDirs) {
+ filters |= QDir::Dirs;
+ } else if (watchModes & KDirWatch::WatchFiles) {
+ filters |= QDir::Files;
+ }
+
+#if HAVE_SYS_INOTIFY_H
+ if (e->m_mode == INotifyMode || (e->m_mode == UnknownMode && m_preferredMethod == KDirWatch::INotify)) {
+ // qCDebug(KDIRWATCH) << "Ignoring WatchFiles directive - this is implicit with inotify";
+ // Placing a watch on individual files is redundant with inotify
+ // (inotify gives us WatchFiles functionality "for free") and indeed
+ // actively harmful, so prevent it. WatchSubDirs is necessary, though.
+ filters &= ~QDir::Files;
+ }
+#endif
+
+ QDir basedir(e->path);
+ const QFileInfoList contents = basedir.entryInfoList(filters);
+ for (QFileInfoList::const_iterator iter = contents.constBegin(); iter != contents.constEnd(); ++iter) {
+ const QFileInfo &fileInfo = *iter;
+ // treat symlinks as files--don't follow them.
+ bool isDir = fileInfo.isDir() && !fileInfo.isSymLink();
+
+ addEntry(instance, fileInfo.absoluteFilePath(), nullptr, isDir, isDir ? watchModes : KDirWatch::WatchDirOnly);
+ }
+ }
+
+ addWatch(e);
+}
+
+void KDirWatchPrivate::addWatch(Entry *e)
+{
+ // If the watch is on a network filesystem use the nfsPreferredMethod as the
+ // default, otherwise use preferredMethod as the default, if the methods are
+ // the same we can skip the mountpoint check
+
+ // This allows to configure a different method for NFS mounts, since inotify
+ // cannot detect changes made by other machines. However as a default inotify
+ // is fine, since the most common case is a NFS-mounted home, where all changes
+ // are made locally. #177892.
+
+ KDirWatch::Method preferredMethod = m_preferredMethod;
+ if (KNetworkMounts::self()->isOptionEnabledForPath(e->path, KNetworkMounts::KDirWatchUseINotify)) {
+ preferredMethod = KDirWatch::INotify;
+ } else if (m_nfsPreferredMethod != m_preferredMethod) {
+ if (KFileSystemType::fileSystemType(e->path) == KFileSystemType::Nfs) {
+ preferredMethod = m_nfsPreferredMethod;
+ }
+ }
+
+ // Try the appropriate preferred method from the config first
+ bool entryAdded = false;
+ switch (preferredMethod) {
+#if HAVE_FAM
+ case KDirWatch::FAM:
+ entryAdded = useFAM(e);
+ break;
+#else
+ case KDirWatch::FAM:
+ entryAdded = false;
+ break;
+#endif
+#if HAVE_SYS_INOTIFY_H
+ case KDirWatch::INotify:
+ entryAdded = useINotify(e);
+ break;
+#else
+ case KDirWatch::INotify:
+ entryAdded = false;
+ break;
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ case KDirWatch::QFSWatch:
+ entryAdded = useQFSWatch(e);
+ break;
+#else
+ case KDirWatch::QFSWatch:
+ entryAdded = false;
+ break;
+#endif
+ case KDirWatch::Stat:
+ entryAdded = useStat(e);
+ break;
+ }
+
+ // Failing that try in order INotify, FAM, QFSWatch, Stat
+ if (!entryAdded) {
+#if HAVE_SYS_INOTIFY_H
+ if (useINotify(e)) {
+ return;
+ }
+#endif
+#if HAVE_FAM
+ if (useFAM(e)) {
+ return;
+ }
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ if (useQFSWatch(e)) {
+ return;
+ }
+#endif
+ useStat(e);
+ }
+}
+
+void KDirWatchPrivate::removeWatch(Entry *e)
+{
+#if HAVE_FAM
+ if (e->m_mode == FAMMode) {
+ FAMCancelMonitor(&fc, &(e->fr));
+ qCDebug(KDIRWATCH).nospace() << "Cancelled FAM (Req " << FAMREQUEST_GETREQNUM(&(e->fr)) << ") for " << e->path;
+ }
+#endif
+#if HAVE_SYS_INOTIFY_H
+ if (e->m_mode == INotifyMode) {
+ m_inotify_wd_to_entry.remove(e->wd);
+ (void)inotify_rm_watch(m_inotify_fd, e->wd);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH).nospace() << "Cancelled INotify (fd " << m_inotify_fd << ", " << e->wd << ") for " << e->path;
+ }
+ }
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ if (e->m_mode == QFSWatchMode && fsWatcher) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "fsWatcher->removePath" << e->path;
+ }
+ fsWatcher->removePath(e->path);
+ }
+#endif
+}
+
+void KDirWatchPrivate::removeEntry(KDirWatch *instance, const QString &_path, Entry *sub_entry)
+{
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "path=" << _path << "sub_entry:" << sub_entry;
+ }
+ Entry *e = entry(_path);
+ if (e) {
+ removeEntry(instance, e, sub_entry);
+ }
+}
+
+void KDirWatchPrivate::removeEntry(KDirWatch *instance, Entry *e, Entry *sub_entry)
+{
+ removeList.remove(e);
+
+ if (sub_entry) {
+ e->m_entries.removeAll(sub_entry);
+ } else {
+ e->removeClient(instance);
+ }
+
+ if (!e->m_clients.empty() || !e->m_entries.empty()) {
+ return;
+ }
+
+ if (delayRemove) {
+ removeList.insert(e);
+ // now e->isValid() is false
+ return;
+ }
+
+ if (e->m_status == Normal) {
+ removeWatch(e);
+ } else {
+ // Removed a NonExistent entry - we just remove it from the parent
+ if (e->isDir) {
+ removeEntry(nullptr, e->parentDirectory(), e);
+ } else {
+ removeEntry(nullptr, QFileInfo(e->path).absolutePath(), e);
+ }
+ }
+
+ if (e->m_mode == StatMode) {
+ statEntries--;
+ if (statEntries == 0) {
+ timer.stop(); // stop timer if lists are empty
+ qCDebug(KDIRWATCH) << " Stopped Polling Timer";
+ }
+ }
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH).nospace() << "Removed " << (e->isDir ? "Dir " : "File ") << e->path << " for " << (sub_entry ? sub_entry->path : QString()) << " ["
+ << (instance ? instance->objectName() : QString()) << "]";
+ }
+ QString p = e->path; // take a copy, QMap::remove takes a reference and deletes, since e points into the map
+#if HAVE_SYS_INOTIFY_H
+ m_inotify_wd_to_entry.remove(e->wd);
+#endif
+ m_mapEntries.remove(p); // <e> not valid any more
+}
+
+/* Called from KDirWatch destructor:
+ * remove <instance> as client from all entries
+ */
+void KDirWatchPrivate::removeEntries(KDirWatch *instance)
+{
+ int minfreq = 3600000;
+
+ QStringList pathList;
+ // put all entries where instance is a client in list
+ EntryMap::Iterator it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ Client *c = nullptr;
+ for (Client &client : (*it).m_clients) {
+ if (client.instance == instance) {
+ c = &client;
+ break;
+ }
+ }
+ if (c) {
+ c->count = 1; // forces deletion of instance as client
+ pathList.append((*it).path);
+ } else if ((*it).m_mode == StatMode && (*it).freq < minfreq) {
+ minfreq = (*it).freq;
+ }
+ }
+
+ for (const QString &path : qAsConst(pathList)) {
+ removeEntry(instance, path, nullptr);
+ }
+
+ if (minfreq > freq) {
+ // we can decrease the global polling frequency
+ freq = minfreq;
+ if (timer.isActive()) {
+ timer.start(freq);
+ }
+ qCDebug(KDIRWATCH) << "Poll Freq now" << freq << "msec";
+ }
+}
+
+// instance ==0: stop scanning for all instances
+bool KDirWatchPrivate::stopEntryScan(KDirWatch *instance, Entry *e)
+{
+ int stillWatching = 0;
+ for (Client &client : e->m_clients) {
+ if (!instance || instance == client.instance) {
+ client.watchingStopped = true;
+ } else if (!client.watchingStopped) {
+ stillWatching += client.count;
+ }
+ }
+
+ qCDebug(KDIRWATCH) << (instance ? instance->objectName() : QStringLiteral("all")) << "stopped scanning" << e->path << "(now" << stillWatching
+ << "watchers)";
+
+ if (stillWatching == 0) {
+ // if nobody is interested, we don't watch, and we don't report
+ // changes that happened while not watching
+ e->m_ctime = invalid_ctime; // invalid
+
+ // Changing m_status like this would create wrong "created" events in stat mode.
+ // To really "stop watching" we would need to determine 'stillWatching==0' in scanEntry...
+ // e->m_status = NonExistent;
+ }
+ return true;
+}
+
+// instance ==0: start scanning for all instances
+bool KDirWatchPrivate::restartEntryScan(KDirWatch *instance, Entry *e, bool notify)
+{
+ int wasWatching = 0, newWatching = 0;
+ for (Client &client : e->m_clients) {
+ if (!client.watchingStopped) {
+ wasWatching += client.count;
+ } else if (!instance || instance == client.instance) {
+ client.watchingStopped = false;
+ newWatching += client.count;
+ }
+ }
+ if (newWatching == 0) {
+ return false;
+ }
+
+ qCDebug(KDIRWATCH) << (instance ? instance->objectName() : QStringLiteral("all")) << "restarted scanning" << e->path << "(now" << wasWatching + newWatching
+ << "watchers)";
+
+ // restart watching and emit pending events
+
+ int ev = NoChange;
+ if (wasWatching == 0) {
+ if (!notify) {
+ QT_STATBUF stat_buf;
+ bool exists = (QT_STAT(QFile::encodeName(e->path).constData(), &stat_buf) == 0);
+ if (exists) {
+ // ctime is the 'creation time' on windows, but with qMax
+ // we get the latest change of any kind, on any platform.
+ e->m_ctime = qMax(stat_buf.st_ctime, stat_buf.st_mtime);
+ e->m_status = Normal;
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Setting status to Normal for" << e << e->path;
+ }
+ e->m_nlink = stat_buf.st_nlink;
+ e->m_ino = stat_buf.st_ino;
+
+ // Same as in scanEntry: ensure no subentry in parent dir
+ removeEntry(nullptr, e->parentDirectory(), e);
+ } else {
+ e->m_ctime = invalid_ctime;
+ e->m_status = NonExistent;
+ e->m_nlink = 0;
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Setting status to NonExistent for" << e << e->path;
+ }
+ }
+ }
+ e->msecLeft = 0;
+ ev = scanEntry(e);
+ }
+ emitEvent(e, ev);
+
+ return true;
+}
+
+// instance ==0: stop scanning for all instances
+void KDirWatchPrivate::stopScan(KDirWatch *instance)
+{
+ EntryMap::Iterator it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ stopEntryScan(instance, &(*it));
+ }
+}
+
+void KDirWatchPrivate::startScan(KDirWatch *instance, bool notify, bool skippedToo)
+{
+ if (!notify) {
+ resetList(instance, skippedToo);
+ }
+
+ EntryMap::Iterator it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ restartEntryScan(instance, &(*it), notify);
+ }
+
+ // timer should still be running when in polling mode
+}
+
+// clear all pending events, also from stopped
+void KDirWatchPrivate::resetList(KDirWatch *instance, bool skippedToo)
+{
+ Q_UNUSED(instance);
+ EntryMap::Iterator it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ for (Client &client : (*it).m_clients) {
+ if (!client.watchingStopped || skippedToo) {
+ client.pending = NoChange;
+ }
+ }
+ }
+}
+
+// Return event happened on <e>
+//
+int KDirWatchPrivate::scanEntry(Entry *e)
+{
+ // Shouldn't happen: Ignore "unknown" notification method
+ if (e->m_mode == UnknownMode) {
+ return NoChange;
+ }
+
+ if (e->m_mode == FAMMode || e->m_mode == INotifyMode) {
+ // we know nothing has changed, no need to stat
+ if (!e->dirty) {
+ return NoChange;
+ }
+ e->dirty = false;
+ }
+
+ if (e->m_mode == StatMode) {
+ // only scan if timeout on entry timer happens;
+ // e.g. when using 500msec global timer, a entry
+ // with freq=5000 is only watched every 10th time
+
+ e->msecLeft -= freq;
+ if (e->msecLeft > 0) {
+ return NoChange;
+ }
+ e->msecLeft += e->freq;
+ }
+
+ QT_STATBUF stat_buf;
+ const bool exists = (QT_STAT(QFile::encodeName(e->path).constData(), &stat_buf) == 0);
+ if (exists) {
+ if (e->m_status == NonExistent) {
+ // ctime is the 'creation time' on windows, but with qMax
+ // we get the latest change of any kind, on any platform.
+ e->m_ctime = qMax(stat_buf.st_ctime, stat_buf.st_mtime);
+ e->m_status = Normal;
+ e->m_ino = stat_buf.st_ino;
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "Setting status to Normal for just created" << e << e->path;
+ }
+ // We need to make sure the entry isn't listed in its parent's subentries... (#222974, testMoveTo)
+ removeEntry(nullptr, e->parentDirectory(), e);
+
+ return Created;
+ }
+
+#if 1 // for debugging the if() below
+ if (s_verboseDebug) {
+ struct tm *tmp = localtime(&e->m_ctime);
+ char outstr[200];
+ strftime(outstr, sizeof(outstr), "%H:%M:%S", tmp);
+ qCDebug(KDIRWATCH) << e->path << "e->m_ctime=" << e->m_ctime << outstr << "stat_buf.st_ctime=" << stat_buf.st_ctime
+ << "stat_buf.st_mtime=" << stat_buf.st_mtime << "e->m_nlink=" << e->m_nlink << "stat_buf.st_nlink=" << stat_buf.st_nlink
+ << "e->m_ino=" << e->m_ino << "stat_buf.st_ino=" << stat_buf.st_ino;
+ }
+#endif
+
+ if ((e->m_ctime != invalid_ctime)
+ && (qMax(stat_buf.st_ctime, stat_buf.st_mtime) != e->m_ctime || stat_buf.st_ino != e->m_ino
+ || int(stat_buf.st_nlink) != int(e->m_nlink)
+#ifdef Q_OS_WIN
+ // on Windows, we trust QFSW to get it right, the ctime comparisons above
+ // fail for example when adding files to directories on Windows
+ // which doesn't change the mtime of the directory
+ || e->m_mode == QFSWatchMode
+#endif
+ )) {
+ e->m_ctime = qMax(stat_buf.st_ctime, stat_buf.st_mtime);
+ e->m_nlink = stat_buf.st_nlink;
+ if (e->m_ino != stat_buf.st_ino) {
+ // The file got deleted and recreated. We need to watch it again.
+ removeWatch(e);
+ addWatch(e);
+ e->m_ino = stat_buf.st_ino;
+ return (Deleted | Created);
+ } else {
+ return Changed;
+ }
+ }
+
+ return NoChange;
+ }
+
+ // dir/file doesn't exist
+
+ e->m_nlink = 0;
+ e->m_ino = 0;
+ e->m_status = NonExistent;
+
+ if (e->m_ctime == invalid_ctime) {
+ return NoChange;
+ }
+
+ e->m_ctime = invalid_ctime;
+ return Deleted;
+}
+
+/* Notify all interested KDirWatch instances about a given event on an entry
+ * and stored pending events. When watching is stopped, the event is
+ * added to the pending events.
+ */
+void KDirWatchPrivate::emitEvent(Entry *e, int event, const QString &fileName)
+{
+ QString path(e->path);
+ if (!fileName.isEmpty()) {
+ if (!QDir::isRelativePath(fileName)) {
+ path = fileName;
+ } else {
+#ifdef Q_OS_UNIX
+ path += QLatin1Char('/') + fileName;
+#elif defined(Q_OS_WIN)
+ // current drive is passed instead of /
+ path += QDir::currentPath().leftRef(2) + QLatin1Char('/') + fileName;
+#endif
+ }
+ }
+
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << event << path << e->m_clients.size() << "clients";
+ }
+
+ for (Client &c : e->m_clients) {
+ if (c.instance == nullptr || c.count == 0) {
+ continue;
+ }
+
+ if (c.watchingStopped) {
+ // Do not add event to a list of pending events, the docs say restartDirScan won't emit!
+ continue;
+ }
+ // not stopped
+ if (event == NoChange || event == Changed) {
+ event |= c.pending;
+ }
+ c.pending = NoChange;
+ if (event == NoChange) {
+ continue;
+ }
+
+ // Emit the signals delayed, to avoid unexpected re-entrance from the slots (#220153)
+
+ if (event & Deleted) {
+ QMetaObject::invokeMethod(
+ c.instance,
+ [c, path]() {
+ c.instance->setDeleted(path);
+ },
+ Qt::QueuedConnection);
+ }
+
+ if (event & Created) {
+ QMetaObject::invokeMethod(
+ c.instance,
+ [c, path]() {
+ c.instance->setCreated(path);
+ },
+ Qt::QueuedConnection);
+ // possible emit Change event after creation
+ }
+
+ if (event & Changed) {
+ QMetaObject::invokeMethod(
+ c.instance,
+ [c, path]() {
+ c.instance->setDirty(path);
+ },
+ Qt::QueuedConnection);
+ }
+ }
+}
+
+// Remove entries which were marked to be removed
+void KDirWatchPrivate::slotRemoveDelayed()
+{
+ delayRemove = false;
+ // Removing an entry could also take care of removing its parent
+ // (e.g. in FAM or inotify mode), which would remove other entries in removeList,
+ // so don't use Q_FOREACH or iterators here...
+ while (!removeList.isEmpty()) {
+ Entry *entry = *removeList.begin();
+ removeEntry(nullptr, entry, nullptr); // this will remove entry from removeList
+ }
+}
+
+/* Scan all entries to be watched for changes. This is done regularly
+ * when polling. FAM and inotify use a single-shot timer to call this slot delayed.
+ */
+void KDirWatchPrivate::slotRescan()
+{
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH);
+ }
+
+ EntryMap::Iterator it;
+
+ // People can do very long things in the slot connected to dirty(),
+ // like showing a message box. We don't want to keep polling during
+ // that time, otherwise the value of 'delayRemove' will be reset.
+ // ### TODO: now the emitEvent delays emission, this can be cleaned up
+ bool timerRunning = timer.isActive();
+ if (timerRunning) {
+ timer.stop();
+ }
+
+ // We delay deletions of entries this way.
+ // removeDir(), when called in slotDirty(), can cause a crash otherwise
+ // ### TODO: now the emitEvent delays emission, this can be cleaned up
+ delayRemove = true;
+
+ if (rescan_all) {
+ // mark all as dirty
+ it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ (*it).dirty = true;
+ }
+ rescan_all = false;
+ } else {
+ // propagate dirty flag to dependent entries (e.g. file watches)
+ it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it)
+ if (((*it).m_mode == INotifyMode || (*it).m_mode == QFSWatchMode) && (*it).dirty) {
+ (*it).propagate_dirty();
+ }
+ }
+
+#if HAVE_SYS_INOTIFY_H
+ QList<Entry *> cList;
+#endif
+
+ it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ // we don't check invalid entries (i.e. remove delayed)
+ Entry *entry = &(*it);
+ if (!entry->isValid()) {
+ continue;
+ }
+
+ const int ev = scanEntry(entry);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "scanEntry for" << entry->path << "says" << ev;
+ }
+
+ switch (entry->m_mode) {
+#if HAVE_SYS_INOTIFY_H
+ case INotifyMode:
+ if (ev == Deleted) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "scanEntry says" << entry->path << "was deleted";
+ }
+ addEntry(nullptr, entry->parentDirectory(), entry, true);
+ } else if (ev == Created) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "scanEntry says" << entry->path << "was created. wd=" << entry->wd;
+ }
+ if (entry->wd < 0) {
+ cList.append(entry);
+ addWatch(entry);
+ }
+ }
+ break;
+#endif
+ case FAMMode:
+ case QFSWatchMode:
+ if (ev == Created) {
+ addWatch(entry);
+ }
+ break;
+ default:
+ // dunno about StatMode...
+ break;
+ }
+
+#if HAVE_SYS_INOTIFY_H
+ if (entry->isDir) {
+ // Report and clear the list of files that have changed in this directory.
+ // Remove duplicates by changing to set and back again:
+ // we don't really care about preserving the order of the
+ // original changes.
+ QStringList pendingFileChanges = entry->m_pendingFileChanges;
+ pendingFileChanges.removeDuplicates();
+ for (const QString &changedFilename : qAsConst(pendingFileChanges)) {
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "processing pending file change for" << changedFilename;
+ }
+ emitEvent(entry, Changed, changedFilename);
+ }
+ entry->m_pendingFileChanges.clear();
+ }
+#endif
+
+ if (ev != NoChange) {
+ emitEvent(entry, ev);
+ }
+ }
+
+ if (timerRunning) {
+ timer.start(freq);
+ }
+
+#if HAVE_SYS_INOTIFY_H
+ // Remove watch of parent of new created directories
+ for (Entry *e : qAsConst(cList)) {
+ removeEntry(nullptr, e->parentDirectory(), e);
+ }
+#endif
+
+ QTimer::singleShot(0, this, &KDirWatchPrivate::slotRemoveDelayed);
+}
+
+bool KDirWatchPrivate::isNoisyFile(const char *filename)
+{
+ // $HOME/.X.err grows with debug output, so don't notify change
+ if (*filename == '.') {
+ if (strncmp(filename, ".X.err", 6) == 0) {
+ return true;
+ }
+ if (strncmp(filename, ".xsession-errors", 16) == 0) {
+ return true;
+ }
+ // fontconfig updates the cache on every KDE app start
+ // (inclusive kio_thumbnail slaves)
+ if (strncmp(filename, ".fonts.cache", 12) == 0) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void KDirWatchPrivate::ref()
+{
+ ++m_references;
+}
+
+void KDirWatchPrivate::unref()
+{
+ --m_references;
+ if (m_references == 0) {
+ destroyPrivate();
+ }
+}
+
+#if HAVE_FAM
+void KDirWatchPrivate::famEventReceived()
+{
+ static FAMEvent fe;
+
+ delayRemove = true;
+
+ while (use_fam && FAMPending(&fc)) {
+ if (FAMNextEvent(&fc, &fe) == -1) {
+ disableFAM();
+ } else {
+ checkFAMEvent(&fe);
+ }
+ }
+
+ QTimer::singleShot(0, this, &KDirWatchPrivate::slotRemoveDelayed);
+}
+
+void KDirWatchPrivate::disableFAM()
+{
+ qCWarning(KCOREADDONS_DEBUG) << "FAM connection problem, switching to a different system.";
+ use_fam = false;
+ delete sn;
+ sn = nullptr;
+
+ // Replace all FAMMode entries with another system (INotify/QFSW/Stat)
+ for (auto it = m_mapEntries.begin(); it != m_mapEntries.end(); ++it) {
+ if ((*it).m_mode == FAMMode && !(*it).m_clients.empty()) {
+ Entry *e = &(*it);
+ addWatch(e);
+ }
+ }
+}
+
+void KDirWatchPrivate::checkFAMEvent(FAMEvent *fe)
+{
+ Entry *e = nullptr;
+ EntryMap::Iterator it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it)
+ if (FAMREQUEST_GETREQNUM(&((*it).fr)) == FAMREQUEST_GETREQNUM(&(fe->fr))) {
+ e = &(*it);
+ break;
+ }
+
+ // Don't be too verbose ;-)
+ if ((fe->code == FAMExists) || (fe->code == FAMEndExist) || (fe->code == FAMAcknowledge)) {
+ if (e) {
+ e->m_famReportedSeen = true;
+ }
+ return;
+ }
+
+ if (isNoisyFile(fe->filename)) {
+ return;
+ }
+
+ // Entry *e = static_cast<Entry*>(fe->userdata);
+
+ if (s_verboseDebug) { // don't enable this except when debugging, see #88538
+ qCDebug(KDIRWATCH) << "Processing FAM event ("
+ << ((fe->code == FAMChanged) ? "FAMChanged"
+ : (fe->code == FAMDeleted) ? "FAMDeleted"
+ : (fe->code == FAMStartExecuting) ? "FAMStartExecuting"
+ : (fe->code == FAMStopExecuting) ? "FAMStopExecuting"
+ : (fe->code == FAMCreated) ? "FAMCreated"
+ : (fe->code == FAMMoved) ? "FAMMoved"
+ : (fe->code == FAMAcknowledge) ? "FAMAcknowledge"
+ : (fe->code == FAMExists) ? "FAMExists"
+ : (fe->code == FAMEndExist) ? "FAMEndExist"
+ : "Unknown Code")
+ << ", " << fe->filename << ", Req " << FAMREQUEST_GETREQNUM(&(fe->fr)) << ") e=" << e;
+ }
+
+ if (!e) {
+ // this happens e.g. for FAMAcknowledge after deleting a dir...
+ // qCDebug(KDIRWATCH) << "No entry for FAM event ?!";
+ return;
+ }
+
+ if (e->m_status == NonExistent) {
+ qCDebug(KDIRWATCH) << "FAM event for nonExistent entry " << e->path;
+ return;
+ }
+
+ // Delayed handling. This rechecks changes with own stat calls.
+ e->dirty = true;
+ if (!rescan_timer.isActive()) {
+ rescan_timer.start(m_PollInterval); // singleshot
+ }
+
+ // needed FAM control actions on FAM events
+ switch (fe->code) {
+ case FAMDeleted:
+ // fe->filename is an absolute path when a watched file-or-dir is deleted
+ if (!QDir::isRelativePath(QFile::decodeName(fe->filename))) {
+ FAMCancelMonitor(&fc, &(e->fr)); // needed ?
+ qCDebug(KDIRWATCH) << "Cancelled FAMReq" << FAMREQUEST_GETREQNUM(&(e->fr)) << "for" << e->path;
+ e->m_status = NonExistent;
+ e->m_ctime = invalid_ctime;
+ emitEvent(e, Deleted, e->path);
+ // If the parent dir was already watched, tell it something changed
+ Entry *parentEntry = entry(e->parentDirectory());
+ if (parentEntry) {
+ parentEntry->dirty = true;
+ }
+ // Add entry to parent dir to notice if the entry gets recreated
+ addEntry(nullptr, e->parentDirectory(), e, true /*isDir*/);
+ } else {
+ // A file in this directory has been removed, and wasn't explicitly watched.
+ // We could still inform clients, like inotify does? But stat can't.
+ // For now we just marked e dirty and slotRescan will emit the dir as dirty.
+ // qCDebug(KDIRWATCH) << "Got FAMDeleted for" << QFile::decodeName(fe->filename) << "in" << e->path << ". Absolute path -> NOOP!";
+ }
+ break;
+
+ case FAMCreated: {
+ // check for creation of a directory we have to watch
+ QString tpath(e->path + QLatin1Char('/') + QFile::decodeName(fe->filename));
+
+ // This code is very similar to the one in inotifyEventReceived...
+ Entry *sub_entry = e->findSubEntry(tpath);
+ if (sub_entry /*&& sub_entry->isDir*/) {
+ // We were waiting for this new file/dir to be created. We don't actually
+ // emit an event here, as the rescan_timer will re-detect the creation and
+ // do the signal emission there.
+ sub_entry->dirty = true;
+ rescan_timer.start(0); // process this asap, to start watching that dir
+ } else if (e->isDir && !e->m_clients.empty()) {
+ bool isDir = false;
+ const QList<const Client *> clients = e->clientsForFileOrDir(tpath, &isDir);
+ for (const Client *client : clients) {
+ addEntry(client->instance, tpath, nullptr, isDir, isDir ? client->m_watchModes : KDirWatch::WatchDirOnly);
+ }
+
+ if (!clients.isEmpty()) {
+ emitEvent(e, Created, tpath);
+
+ qCDebug(KDIRWATCH).nospace() << clients.count() << " instance(s) monitoring the new " << (isDir ? "dir " : "file ") << tpath;
+ }
+ }
+ } break;
+ default:
+ break;
+ }
+}
+#else
+void KDirWatchPrivate::famEventReceived()
+{
+ qCWarning(KCOREADDONS_DEBUG) << "Fam event received but FAM is not supported";
+}
+#endif
+
+void KDirWatchPrivate::statistics()
+{
+ EntryMap::Iterator it;
+
+ qCDebug(KDIRWATCH) << "Entries watched:";
+ if (m_mapEntries.count() == 0) {
+ qCDebug(KDIRWATCH) << " None.";
+ } else {
+ it = m_mapEntries.begin();
+ for (; it != m_mapEntries.end(); ++it) {
+ Entry *e = &(*it);
+ qCDebug(KDIRWATCH) << " " << *e;
+
+ for (const Client &c : e->m_clients) {
+ QByteArray pending;
+ if (c.watchingStopped) {
+ if (c.pending & Deleted) {
+ pending += "deleted ";
+ }
+ if (c.pending & Created) {
+ pending += "created ";
+ }
+ if (c.pending & Changed) {
+ pending += "changed ";
+ }
+ if (!pending.isEmpty()) {
+ pending = " (pending: " + pending + ')';
+ }
+ pending = ", stopped" + pending;
+ }
+ qCDebug(KDIRWATCH) << " by " << c.instance->objectName() << " (" << c.count << " times)" << pending;
+ }
+ if (!e->m_entries.isEmpty()) {
+ qCDebug(KDIRWATCH) << " dependent entries:";
+ for (Entry *d : qAsConst(e->m_entries)) {
+ qCDebug(KDIRWATCH) << " " << d << d->path << (d->m_status == NonExistent ? "NonExistent" : "EXISTS!!! ERROR!");
+ if (s_verboseDebug) {
+ Q_ASSERT(d->m_status == NonExistent); // it doesn't belong here otherwise
+ }
+ }
+ }
+ }
+ }
+}
+
+#if HAVE_QFILESYSTEMWATCHER
+// Slot for QFileSystemWatcher
+void KDirWatchPrivate::fswEventReceived(const QString &path)
+{
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << path;
+ }
+ EntryMap::Iterator it = m_mapEntries.find(path);
+ if (it != m_mapEntries.end()) {
+ Entry *e = &(*it);
+ e->dirty = true;
+ const int ev = scanEntry(e);
+ if (s_verboseDebug) {
+ qCDebug(KDIRWATCH) << "scanEntry for" << e->path << "says" << ev;
+ }
+ if (ev != NoChange) {
+ emitEvent(e, ev);
+ }
+ if (ev == Deleted) {
+ if (e->isDir) {
+ addEntry(nullptr, e->parentDirectory(), e, true);
+ } else {
+ addEntry(nullptr, QFileInfo(e->path).absolutePath(), e, true);
+ }
+ } else if (ev == Created) {
+ // We were waiting for it to appear; now watch it
+ addWatch(e);
+ } else if (e->isDir) {
+ // Check if any file or dir was created under this directory, that we were waiting for
+ for (Entry *sub_entry : qAsConst(e->m_entries)) {
+ fswEventReceived(sub_entry->path); // recurse, to call scanEntry and see if something changed
+ }
+ } else {
+ /* Even though QFileSystemWatcher only reported the file as modified, it is possible that the file
+ * was in fact just deleted and then immediately recreated. If the file was deleted, QFileSystemWatcher
+ * will delete the watch, and will ignore the file, even after it is recreated. Since it is impossible
+ * to reliably detect this case, always re-request the watch on a dirty signal, to avoid losing the
+ * underlying OS monitor.
+ */
+ fsWatcher->addPath(e->path);
+ }
+ }
+}
+#else
+void KDirWatchPrivate::fswEventReceived(const QString &path)
+{
+ Q_UNUSED(path);
+ qCWarning(KCOREADDONS_DEBUG) << "QFileSystemWatcher event received but QFileSystemWatcher is not supported";
+}
+#endif // HAVE_QFILESYSTEMWATCHER
+
+//
+// Class KDirWatch
+//
+
+Q_GLOBAL_STATIC(KDirWatch, s_pKDirWatchSelf)
+KDirWatch *KDirWatch::self()
+{
+ return s_pKDirWatchSelf();
+}
+
+// <steve> is this used anywhere?
+// <dfaure> yes, see kio/src/core/kcoredirlister_p.h:328
+bool KDirWatch::exists()
+{
+ return s_pKDirWatchSelf.exists() && dwp_self.hasLocalData();
+}
+
+static void postRoutine_KDirWatch()
+{
+ if (s_pKDirWatchSelf.exists()) {
+ s_pKDirWatchSelf()->deleteQFSWatcher();
+ }
+}
+
+KDirWatch::KDirWatch(QObject *parent)
+ : QObject(parent)
+ , d(createPrivate())
+{
+ d->ref();
+ static QBasicAtomicInt nameCounter = Q_BASIC_ATOMIC_INITIALIZER(1);
+ const int counter = nameCounter.fetchAndAddRelaxed(1); // returns the old value
+ setObjectName(QStringLiteral("KDirWatch-%1").arg(counter));
+
+ if (counter == 1) { // very first KDirWatch instance
+ // Must delete QFileSystemWatcher before qApp is gone - bug 261541
+ qAddPostRoutine(postRoutine_KDirWatch);
+ }
+}
+
+KDirWatch::~KDirWatch()
+{
+ if (d && dwp_self.hasLocalData()) { // skip this after app destruction
+ d->removeEntries(this);
+ d->unref();
+ }
+}
+
+void KDirWatch::addDir(const QString &_path, WatchModes watchModes)
+{
+ if (KNetworkMounts::self()->isOptionEnabledForPath(_path, KNetworkMounts::KDirWatchDontAddWatches)) {
+ return;
+ }
+
+ if (d) {
+ d->addEntry(this, _path, nullptr, true, watchModes);
+ }
+}
+
+void KDirWatch::addFile(const QString &_path)
+{
+ if (KNetworkMounts::self()->isOptionEnabledForPath(_path, KNetworkMounts::KDirWatchDontAddWatches)) {
+ return;
+ }
+
+ if (!d) {
+ return;
+ }
+
+ d->addEntry(this, _path, nullptr, false);
+}
+
+QDateTime KDirWatch::ctime(const QString &_path) const
+{
+ KDirWatchPrivate::Entry *e = d->entry(_path);
+
+ if (!e) {
+ return QDateTime();
+ }
+
+ return QDateTime::fromSecsSinceEpoch(e->m_ctime);
+}
+
+void KDirWatch::removeDir(const QString &_path)
+{
+ if (d) {
+ d->removeEntry(this, _path, nullptr);
+ }
+}
+
+void KDirWatch::removeFile(const QString &_path)
+{
+ if (d) {
+ d->removeEntry(this, _path, nullptr);
+ }
+}
+
+bool KDirWatch::stopDirScan(const QString &_path)
+{
+ if (d) {
+ KDirWatchPrivate::Entry *e = d->entry(_path);
+ if (e && e->isDir) {
+ return d->stopEntryScan(this, e);
+ }
+ }
+ return false;
+}
+
+bool KDirWatch::restartDirScan(const QString &_path)
+{
+ if (d) {
+ KDirWatchPrivate::Entry *e = d->entry(_path);
+ if (e && e->isDir)
+ // restart without notifying pending events
+ {
+ return d->restartEntryScan(this, e, false);
+ }
+ }
+ return false;
+}
+
+void KDirWatch::stopScan()
+{
+ if (d) {
+ d->stopScan(this);
+ d->_isStopped = true;
+ }
+}
+
+bool KDirWatch::isStopped()
+{
+ return d->_isStopped;
+}
+
+void KDirWatch::startScan(bool notify, bool skippedToo)
+{
+ if (d) {
+ d->_isStopped = false;
+ d->startScan(this, notify, skippedToo);
+ }
+}
+
+bool KDirWatch::contains(const QString &_path) const
+{
+ KDirWatchPrivate::Entry *e = d->entry(_path);
+ if (!e) {
+ return false;
+ }
+
+ for (const KDirWatchPrivate::Client &client : e->m_clients) {
+ if (client.instance == this) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void KDirWatch::deleteQFSWatcher()
+{
+ delete d->fsWatcher;
+ d->fsWatcher = nullptr;
+ d = nullptr;
+}
+
+void KDirWatch::statistics()
+{
+ if (!dwp_self.hasLocalData()) {
+ qCDebug(KDIRWATCH) << "KDirWatch not used";
+ return;
+ }
+ dwp_self.localData()->statistics();
+}
+
+void KDirWatch::setCreated(const QString &_file)
+{
+ qCDebug(KDIRWATCH) << objectName() << "emitting created" << _file;
+ Q_EMIT created(_file);
+}
+
+void KDirWatch::setDirty(const QString &_file)
+{
+ Q_EMIT dirty(_file);
+}
+
+void KDirWatch::setDeleted(const QString &_file)
+{
+ qCDebug(KDIRWATCH) << objectName() << "emitting deleted" << _file;
+ Q_EMIT deleted(_file);
+}
+
+KDirWatch::Method KDirWatch::internalMethod() const
+{
+ // This reproduces the logic in KDirWatchPrivate::addWatch
+ switch (d->m_preferredMethod) {
+ case KDirWatch::FAM:
+#if HAVE_FAM
+ if (d->use_fam) {
+ return KDirWatch::FAM;
+ }
+#endif
+ break;
+ case KDirWatch::INotify:
+#if HAVE_SYS_INOTIFY_H
+ if (d->supports_inotify) {
+ return KDirWatch::INotify;
+ }
+#endif
+ break;
+ case KDirWatch::QFSWatch:
+#if HAVE_QFILESYSTEMWATCHER
+ return KDirWatch::QFSWatch;
+#else
+ break;
+#endif
+ case KDirWatch::Stat:
+ return KDirWatch::Stat;
+ }
+
+#if HAVE_SYS_INOTIFY_H
+ if (d->supports_inotify) {
+ return KDirWatch::INotify;
+ }
+#endif
+#if HAVE_FAM
+ if (d->use_fam) {
+ return KDirWatch::FAM;
+ }
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ return KDirWatch::QFSWatch;
+#else
+ return KDirWatch::Stat;
+#endif
+}
+
+#include "moc_kdirwatch.cpp"
+#include "moc_kdirwatch_p.cpp"
+
+// sven
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1998 Sven Radej <sven@lisa.exp.univie.ac.at>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+#ifndef _KDIRWATCH_H
+#define _KDIRWATCH_H
+
+#include <QDateTime>
+#include <QObject>
+#include <QString>
+
+#include <kcoreaddons_export.h>
+
+class KDirWatchPrivate;
+
+/**
+ * @class KDirWatch kdirwatch.h KDirWatch
+ *
+ * @short Class for watching directory and file changes.
+ *
+ * Watch directories and files for changes.
+ * The watched directories or files don't have to exist yet.
+ *
+ * When a watched directory is changed, i.e. when files therein are
+ * created or deleted, KDirWatch will emit the signal dirty().
+ *
+ * When a watched, but previously not existing directory gets created,
+ * KDirWatch will emit the signal created().
+ *
+ * When a watched directory gets deleted, KDirWatch will emit the
+ * signal deleted(). The directory is still watched for new
+ * creation.
+ *
+ * When a watched file is changed, i.e. attributes changed or written
+ * to, KDirWatch will emit the signal dirty().
+ *
+ * Scanning of particular directories or files can be stopped temporarily
+ * and restarted. The whole class can be stopped and restarted.
+ * Directories and files can be added/removed from the list in any state.
+ *
+ * The implementation uses the INOTIFY functionality on LINUX.
+ * Otherwise the FAM service is used, when available.
+ * As a last resort, a regular polling for change of modification times
+ * is done; the polling interval is a global config option:
+ * DirWatch/PollInterval and DirWatch/NFSPollInterval for NFS mounted
+ * directories.
+ * The choice of implementation can be adjusted by the user, with the key
+ * [DirWatch] PreferredMethod={Fam|Stat|QFSWatch|inotify}
+ *
+ * @see self()
+ * @author Sven Radej (in 1998)
+ */
+class KCOREADDONS_EXPORT KDirWatch : public QObject
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Available watch modes for directory monitoring
+ * @see WatchModes
+ **/
+ enum WatchMode {
+ WatchDirOnly = 0, ///< Watch just the specified directory
+ WatchFiles = 0x01, ///< Watch also all files contained by the directory
+ WatchSubDirs = 0x02, ///< Watch also all the subdirs contained by the directory
+ };
+ /**
+ * Stores a combination of #WatchMode values.
+ */
+ Q_DECLARE_FLAGS(WatchModes, WatchMode)
+
+ /**
+ * Constructor.
+ *
+ * Scanning begins immediately when a dir/file watch
+ * is added.
+ * @param parent the parent of the QObject (or @c nullptr for parent-less KDataTools)
+ */
+ explicit KDirWatch(QObject *parent = nullptr);
+
+ /**
+ * Destructor.
+ *
+ * Stops scanning and cleans up.
+ */
+ ~KDirWatch();
+
+ /**
+ * Adds a directory to be watched.
+ *
+ * The directory does not have to exist. When @p watchModes is set to
+ * WatchDirOnly (the default), the signals dirty(), created(), deleted()
+ * can be emitted, all for the watched directory.
+ * When @p watchModes is set to WatchFiles, all files in the watched
+ * directory are watched for changes, too. Thus, the signals dirty(),
+ * created(), deleted() can be emitted.
+ * When @p watchModes is set to WatchSubDirs, all subdirs are watched using
+ * the same flags specified in @p watchModes (symlinks aren't followed).
+ * If the @p path points to a symlink to a directory, the target directory
+ * is watched instead. If you want to watch the link, use @p addFile().
+ *
+ * @param path the path to watch
+ * @param watchModes watch modes
+ *
+ * @sa KDirWatch::WatchMode
+ */
+ void addDir(const QString &path, WatchModes watchModes = WatchDirOnly);
+
+ /**
+ * Adds a file to be watched.
+ * If it's a symlink to a directory, it watches the symlink itself.
+ * @param file the file to watch
+ */
+ void addFile(const QString &file);
+
+ /**
+ * Returns the time the directory/file was last changed.
+ * @param path the file to check
+ * @return the date of the last modification
+ */
+ QDateTime ctime(const QString &path) const;
+
+ /**
+ * Removes a directory from the list of scanned directories.
+ *
+ * If specified path is not in the list this does nothing.
+ * @param path the path of the dir to be removed from the list
+ */
+ void removeDir(const QString &path);
+
+ /**
+ * Removes a file from the list of watched files.
+ *
+ * If specified path is not in the list this does nothing.
+ * @param file the file to be removed from the list
+ */
+ void removeFile(const QString &file);
+
+ /**
+ * Stops scanning the specified path.
+ *
+ * The @p path is not deleted from the internal list, it is just skipped.
+ * Call this function when you perform an huge operation
+ * on this directory (copy/move big files or many files). When finished,
+ * call restartDirScan(path).
+ *
+ * @param path the path to skip
+ * @return true if the @p path is being watched, otherwise false
+ * @see restartDirScan()
+ */
+ bool stopDirScan(const QString &path);
+
+ /**
+ * Restarts scanning for specified path.
+ *
+ * It doesn't notify about the changes (by emitting a signal).
+ * The ctime value is reset.
+ *
+ * Call it when you are finished with big operations on that path,
+ * @em and when @em you have refreshed that path.
+ *
+ * @param path the path to restart scanning
+ * @return true if the @p path is being watched, otherwise false
+ * @see stopDirScan()
+ */
+ bool restartDirScan(const QString &path);
+
+ /**
+ * Starts scanning of all dirs in list.
+ *
+ * @param notify If true, all changed directories (since
+ * stopScan() call) will be notified for refresh. If notify is
+ * false, all ctimes will be reset (except those who are stopped,
+ * but only if @p skippedToo is false) and changed dirs won't be
+ * notified. You can start scanning even if the list is
+ * empty. First call should be called with @p false or else all
+ * directories
+ * in list will be notified.
+ * @param skippedToo if true, the skipped directories (scanning of which was
+ * stopped with stopDirScan() ) will be reset and notified
+ * for change. Otherwise, stopped directories will continue to be
+ * unnotified.
+ */
+ void startScan(bool notify = false, bool skippedToo = false);
+
+ /**
+ * Stops scanning of all directories in internal list.
+ *
+ * The timer is stopped, but the list is not cleared.
+ */
+ void stopScan();
+
+ /**
+ * Is scanning stopped?
+ * After creation of a KDirWatch instance, this is false.
+ * @return true when scanning stopped
+ */
+ bool isStopped();
+
+ /**
+ * Check if a directory is being watched by this KDirWatch instance
+ * @param path the directory to check
+ * @return true if the directory is being watched
+ */
+ bool contains(const QString &path) const;
+
+ void deleteQFSWatcher(); // KF6 TODO: remove from public API
+
+ /**
+ * Dump statistic information about the KDirWatch::self() instance.
+ * This checks for consistency, too.
+ */
+ static void statistics(); // TODO implement a QDebug operator for KDirWatch instead.
+
+ enum Method {
+ FAM,
+ INotify,
+ Stat,
+ QFSWatch,
+ };
+ /**
+ * Returns the preferred internal method to
+ * watch for changes.
+ */
+ Method internalMethod() const;
+
+ /**
+ * The KDirWatch instance usually globally used in an application.
+ * It is automatically deleted when the application exits.
+ *
+ * However, you can create an arbitrary number of KDirWatch instances
+ * aside from this one - for those you have to take care of memory management.
+ *
+ * This function returns an instance of KDirWatch. If there is none, it
+ * will be created.
+ *
+ * @return a KDirWatch instance
+ */
+ static KDirWatch *self();
+ /**
+ * Returns true if there is an instance of KDirWatch.
+ * @return true if there is an instance of KDirWatch.
+ * @see KDirWatch::self()
+ */
+ static bool exists();
+
+public Q_SLOTS:
+
+ /**
+ * Emits created().
+ * @param path the path of the file or directory
+ */
+ void setCreated(const QString &path);
+
+ /**
+ * Emits dirty().
+ * @param path the path of the file or directory
+ */
+ void setDirty(const QString &path);
+
+ /**
+ * Emits deleted().
+ * @param path the path of the file or directory
+ */
+ void setDeleted(const QString &path);
+
+Q_SIGNALS:
+
+ /**
+ * Emitted when a watched object is changed.
+ * For a directory this signal is emitted when files
+ * therein are created or deleted.
+ * For a file this signal is emitted when its size or attributes change.
+ *
+ * When you watch a directory, changes in the size or attributes of
+ * contained files may or may not trigger this signal to be emitted
+ * depending on which backend is used by KDirWatch.
+ *
+ * The new ctime is set before the signal is emitted.
+ * @param path the path of the file or directory
+ */
+ void dirty(const QString &path);
+
+ /**
+ * Emitted when a file or directory (being watched explicitly) is created.
+ * This is not emitted when creating a file is created in a watched directory.
+ * @param path the path of the file or directory
+ */
+ void created(const QString &path);
+
+ /**
+ * Emitted when a file or directory is deleted.
+ *
+ * The object is still watched for new creation.
+ * @param path the path of the file or directory
+ */
+ void deleted(const QString &path);
+
+private:
+ KDirWatchPrivate *d;
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(KDirWatch::WatchModes)
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1998 Sven Radej <sven@lisa.exp.univie.ac.at>
+ SPDX-FileCopyrightText: 2006 Dirk Mueller <mueller@kde.org>
+ SPDX-FileCopyrightText: 2007 Flavio Castelli <flavio.castelli@gmail.com>
+ SPDX-FileCopyrightText: 2008 Jarosław Staniek <staniek@kde.org>
+ SPDX-FileCopyrightText: 2020 Harald Sitter <sitter@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+
+ Private Header for class of KDirWatchPrivate
+ this separate header file is needed for MOC processing
+ because KDirWatchPrivate has signals and slots
+*/
+
+#ifndef KDIRWATCH_P_H
+#define KDIRWATCH_P_H
+
+#include "kdirwatch.h"
+#include <io/config-kdirwatch.h>
+
+#ifndef QT_NO_FILESYSTEMWATCHER
+#define HAVE_QFILESYSTEMWATCHER 1
+#else
+#define HAVE_QFILESYSTEMWATCHER 0
+#endif
+
+#include <QList>
+#include <QMap>
+#include <QObject>
+#include <QSet>
+#include <QString>
+#include <QTimer>
+class QSocketNotifier;
+
+#if HAVE_FAM
+#include <fam.h>
+#include <limits.h>
+#endif
+
+#include <ctime>
+#include <sys/types.h> // time_t, ino_t
+
+#define invalid_ctime (static_cast<time_t>(-1))
+
+#if HAVE_QFILESYSTEMWATCHER
+#include <QFileSystemWatcher>
+#endif // HAVE_QFILESYSTEMWATCHER
+
+/* KDirWatchPrivate is a singleton and does the watching
+ * for every KDirWatch instance in the application.
+ */
+class KDirWatchPrivate : public QObject
+{
+ Q_OBJECT
+public:
+ enum entryStatus {
+ Normal = 0,
+ NonExistent,
+ };
+ enum entryMode {
+ UnknownMode = 0,
+ StatMode,
+ INotifyMode,
+ FAMMode,
+ QFSWatchMode,
+ };
+ enum {
+ NoChange = 0,
+ Changed = 1,
+ Created = 2,
+ Deleted = 4,
+ };
+
+ struct Client {
+ Client(KDirWatch *inst, KDirWatch::WatchModes watchModes)
+ : instance(inst)
+ , count(1)
+ , watchingStopped(inst->isStopped())
+ , pending(NoChange)
+ , m_watchModes(watchModes)
+ {
+ }
+
+ // The compiler needs a copy ctor for Client when Entry is inserted into m_mapEntries
+ // (even though the vector of clients is empty at that point, so no performance penalty there)
+ // Client(const Client &) = delete;
+ // Client &operator=(const Client &) = delete;
+ // Client(Client &&) = default;
+ // Client &operator=(Client &&) = default;
+
+ KDirWatch *instance;
+ int count;
+ // did the instance stop watching
+ bool watchingStopped;
+ // events blocked when stopped
+ int pending;
+ KDirWatch::WatchModes m_watchModes;
+ };
+
+ class Entry
+ {
+ public:
+ ~Entry();
+ // instances interested in events
+ std::vector<Client> m_clients;
+ // nonexistent entries of this directory
+ QList<Entry *> m_entries;
+ QString path;
+
+ // the last observed modification time
+ time_t m_ctime;
+ // last observed inode
+ ino_t m_ino;
+ // the last observed link count
+ int m_nlink;
+ entryStatus m_status;
+ entryMode m_mode;
+ int msecLeft, freq;
+ bool isDir;
+
+ QString parentDirectory() const;
+ void addClient(KDirWatch *, KDirWatch::WatchModes);
+ void removeClient(KDirWatch *);
+ int clientCount() const;
+ bool isValid()
+ {
+ return !m_clients.empty() || !m_entries.empty();
+ }
+
+ Entry *findSubEntry(const QString &path) const
+ {
+ for (Entry *sub_entry : qAsConst(m_entries)) {
+ if (sub_entry->path == path) {
+ return sub_entry;
+ }
+ }
+ return nullptr;
+ }
+
+ bool dirty;
+ void propagate_dirty();
+
+ QList<const Client *> clientsForFileOrDir(const QString &tpath, bool *isDir) const;
+ QList<const Client *> inotifyClientsForFileOrDir(bool isDir) const;
+
+#if HAVE_FAM
+ FAMRequest fr;
+ bool m_famReportedSeen;
+#endif
+
+#if HAVE_SYS_INOTIFY_H
+ int wd;
+ // Creation and Deletion of files happens infrequently, so
+ // can safely be reported as they occur. File changes i.e. those that emit "dirty()" can
+ // happen many times per second, though, so maintain a list of files in this directory
+ // that can be emitted and flushed at the next slotRescan(...).
+ // This will be unused if the Entry is not a directory.
+ QList<QString> m_pendingFileChanges;
+#endif
+ };
+
+ typedef QMap<QString, Entry> EntryMap;
+
+ KDirWatchPrivate();
+ ~KDirWatchPrivate();
+
+ void resetList(KDirWatch *instance, bool skippedToo);
+ void useFreq(Entry *e, int newFreq);
+ void addEntry(KDirWatch *instance, const QString &_path, Entry *sub_entry, bool isDir, KDirWatch::WatchModes watchModes = KDirWatch::WatchDirOnly);
+ void removeEntry(KDirWatch *instance, const QString &path, Entry *sub_entry);
+ void removeEntry(KDirWatch *instance, Entry *e, Entry *sub_entry);
+ bool stopEntryScan(KDirWatch *instance, Entry *e);
+ bool restartEntryScan(KDirWatch *instance, Entry *e, bool notify);
+ void stopScan(KDirWatch *instance);
+ void startScan(KDirWatch *instance, bool notify, bool skippedToo);
+
+ void removeEntries(KDirWatch *instance);
+ void statistics();
+
+ void addWatch(Entry *entry);
+ void removeWatch(Entry *entry);
+ Entry *entry(const QString &_path);
+ int scanEntry(Entry *e);
+ void emitEvent(Entry *e, int event, const QString &fileName = QString());
+
+ static bool isNoisyFile(const char *filename);
+
+ void ref();
+ void unref();
+
+public Q_SLOTS:
+ void slotRescan();
+ void famEventReceived(); // for FAM
+ void inotifyEventReceived(); // for inotify
+ void slotRemoveDelayed();
+ void fswEventReceived(const QString &path); // for QFileSystemWatcher
+
+public:
+ QTimer timer;
+ EntryMap m_mapEntries;
+
+ KDirWatch::Method m_preferredMethod, m_nfsPreferredMethod;
+ int freq;
+ int statEntries;
+ int m_nfsPollInterval, m_PollInterval;
+ bool useStat(Entry *e);
+
+ // removeList is allowed to contain any entry at most once
+ QSet<Entry *> removeList;
+ bool delayRemove;
+
+ bool rescan_all;
+ QTimer rescan_timer;
+
+#if HAVE_FAM
+ QSocketNotifier *sn;
+ FAMConnection fc;
+ bool use_fam;
+
+ void checkFAMEvent(FAMEvent *fe);
+ bool useFAM(Entry *e);
+ void disableFAM();
+#endif
+
+#if HAVE_SYS_INOTIFY_H
+ QSocketNotifier *mSn;
+ bool supports_inotify;
+ int m_inotify_fd;
+ QHash<int, Entry *> m_inotify_wd_to_entry;
+
+ bool useINotify(Entry *e);
+#endif
+#if HAVE_QFILESYSTEMWATCHER
+ QFileSystemWatcher *fsWatcher;
+ bool useQFSWatch(Entry *e);
+#endif
+
+ bool _isStopped;
+
+private:
+ // Public objects that reference this thread-local private instance.
+ uint m_references;
+};
+
+QDebug operator<<(QDebug debug, const KDirWatchPrivate::Entry &entry);
+
+#endif // KDIRWATCH_P_H
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2011 David Faure <faure@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.1-only
+*/
+
+#include "kfilesystemtype.h"
+#include "kcoreaddons_debug.h"
+#include "knetworkmounts.h"
+
+#include <QFile>
+
+#ifndef Q_OS_WIN
+inline KFileSystemType::Type kde_typeFromName(const char *name)
+{
+ /* clang-format off */
+ if (qstrncmp(name, "nfs", 3) == 0
+ || qstrncmp(name, "autofs", 6) == 0
+ || qstrncmp(name, "cachefs", 7) == 0
+ || qstrncmp(name, "fuse.sshfs", 10) == 0
+ || qstrncmp(name, "xtreemfs@", 9) == 0) { // #178678
+
+ return KFileSystemType::Nfs;
+ }
+ if (qstrncmp(name, "fat", 3) == 0
+ || qstrncmp(name, "vfat", 4) == 0
+ || qstrncmp(name, "msdos", 5) == 0) {
+ return KFileSystemType::Fat;
+ }
+ if (qstrncmp(name, "cifs", 4) == 0
+ || qstrncmp(name, "smbfs", 5) == 0) {
+ return KFileSystemType::Smb;
+ }
+ if (qstrncmp(name, "ramfs", 5) == 0) {
+ return KFileSystemType::Ramfs;
+ }
+ /* clang-format on */
+
+ return KFileSystemType::Other;
+}
+
+#if defined(Q_OS_BSD4) && !defined(Q_OS_NETBSD)
+#include <sys/mount.h>
+#include <sys/param.h>
+
+KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
+{
+ struct statfs buf;
+ if (statfs(path.constData(), &buf) != 0) {
+ return KFileSystemType::Unknown;
+ }
+ return kde_typeFromName(buf.f_fstypename);
+}
+
+#elif defined(Q_OS_LINUX) || defined(Q_OS_HURD)
+#include <sys/statfs.h>
+
+#include <linux/magic.h> // A lot of the filesystem superblock MAGIC numbers
+
+// From /usr/src/linux-5.13.2-1-vanilla/fs/ntfs/ntfs.h
+#ifndef NTFS_SB_MAGIC
+#define NTFS_SB_MAGIC 0x5346544e
+#endif
+
+// From /usr/src/linux-5.13.2-1-vanilla/fs/cifs/smb2glob.h
+#ifndef SMB2_MAGIC_NUMBER
+#define SMB2_MAGIC_NUMBER 0xFE534D42
+#endif
+
+// From /usr/src/linux-5.13.2-1-vanilla/fs/cifs/cifsglob.h
+#ifndef CIFS_MAGIC_NUMBER
+#define CIFS_MAGIC_NUMBER 0xFF534D42
+#endif
+
+// From /usr/src/linux-5.13.2-1-vanilla/fs/fuse/inode.c
+#ifndef FUSE_SUPER_MAGIC
+#define FUSE_SUPER_MAGIC 0x65735546
+#endif
+
+#ifndef AUTOFSNG_SUPER_MAGIC
+#define AUTOFSNG_SUPER_MAGIC 0x7d92b1a0
+#endif
+
+// Reverse-engineering without C++ code:
+// strace stat -f /mnt 2>&1|grep statfs|grep mnt, and look for f_type
+//
+// Also grep'ing in /usr/src/<kernel-version>/fs/
+
+static KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
+{
+ struct statfs buf;
+ if (statfs(path.constData(), &buf) != 0) {
+ return KFileSystemType::Unknown;
+ }
+
+ switch (static_cast<unsigned long>(buf.f_type)) {
+ case NFS_SUPER_MAGIC:
+ case AUTOFS_SUPER_MAGIC:
+ case AUTOFSNG_SUPER_MAGIC:
+ case FUSE_SUPER_MAGIC: // TODO could be anything. Need to use statfs() to find out more.
+ return KFileSystemType::Nfs;
+ case SMB_SUPER_MAGIC:
+ case SMB2_MAGIC_NUMBER:
+ case CIFS_MAGIC_NUMBER:
+ return KFileSystemType::Smb;
+ case MSDOS_SUPER_MAGIC:
+ return KFileSystemType::Fat;
+ case NTFS_SB_MAGIC:
+ return KFileSystemType::Ntfs;
+ case RAMFS_MAGIC:
+ return KFileSystemType::Ramfs;
+ default:
+ return KFileSystemType::Other;
+ }
+}
+
+#elif defined(Q_OS_AIX) || defined(Q_OS_HPUX) || defined(Q_OS_QNX) || defined(Q_OS_SCO) || defined(Q_OS_UNIXWARE) || defined(Q_OS_RELIANT) \
+ || defined(Q_OS_NETBSD)
+#include <sys/statvfs.h>
+
+KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
+{
+ struct statvfs buf;
+ if (statvfs(path.constData(), &buf) != 0) {
+ return KFileSystemType::Unknown;
+ }
+#if defined(Q_OS_NETBSD)
+ return kde_typeFromName(buf.f_fstypename);
+#else
+ return kde_typeFromName(buf.f_basetype);
+#endif
+}
+#endif
+#else
+KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
+{
+ return KFileSystemType::Unknown;
+}
+#endif
+
+KFileSystemType::Type KFileSystemType::fileSystemType(const QString &path)
+{
+ if (KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::KNetworkMountsType::SmbPaths)) {
+ return KFileSystemType::Smb;
+ } else if (KNetworkMounts::self()->isSlowPath(path, KNetworkMounts::KNetworkMountsType::NfsPaths)) {
+ return KFileSystemType::Nfs;
+ } else {
+ return determineFileSystemTypeImpl(QFile::encodeName(path));
+ }
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2011 David Faure <faure@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.1-only
+*/
+
+#ifndef KFILESYSTEMTYPE_P_H
+#define KFILESYSTEMTYPE_P_H
+
+#include <QString>
+#include <kcoreaddons_export.h>
+
+/**
+ * @namespace KFileSystemType
+ * Provides utility functions for the type of file systems.
+ */
+namespace KFileSystemType
+{
+enum Type {
+ Unknown,
+ Nfs, ///< NFS or other full-featured networked filesystems (autofs, subfs, cachefs, sshfs)
+ Smb, ///< SMB/CIFS mount (networked but with some FAT-like behavior)
+ Fat, ///< FAT or similar (msdos, fat, vfat)
+ Ramfs, ///< RAMDISK mount
+ Other, ///< ext, reiser, and so on. "Normal" local filesystems.
+ Ntfs, ///< @since 5.85 NTFS filesystem
+};
+
+/**
+ * Returns the file system type at a given path, as much as we are able to figure it out.
+ * @since 5.0
+ */
+KCOREADDONS_EXPORT Type fileSystemType(const QString &path);
+
+}
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2000-2005 David Faure <faure@kde.org>
+ SPDX-FileCopyrightText: 2021 Alexander Lohnau <alexander.lohnau@gmx.de>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kfileutils.h"
+
+#include <QDirIterator>
+#include <QFileInfo>
+#include <QMimeDatabase>
+#include <QRegularExpression>
+#include <QSet>
+
+QString KFileUtils::makeSuggestedName(const QString &oldName)
+{
+ QString basename;
+
+ // Extract the original file extension from the filename
+ QMimeDatabase db;
+ QString nameSuffix = db.suffixForFileName(oldName);
+
+ if (oldName.lastIndexOf(QLatin1Char('.')) == 0) {
+ basename = QStringLiteral(".");
+ nameSuffix = oldName;
+ } else if (nameSuffix.isEmpty()) {
+ const int lastDot = oldName.lastIndexOf(QLatin1Char('.'));
+ if (lastDot == -1) {
+ basename = oldName;
+ } else {
+ basename = oldName.left(lastDot);
+ nameSuffix = oldName.mid(lastDot);
+ }
+ } else {
+ nameSuffix.prepend(QLatin1Char('.'));
+ basename = oldName.left(oldName.length() - nameSuffix.length());
+ }
+
+ // check if (number) exists at the end of the oldName and increment that number
+ const QRegularExpression re(QStringLiteral("\\((\\d+)\\)"));
+ QRegularExpressionMatch rmatch;
+ oldName.lastIndexOf(re, -1, &rmatch);
+ if (rmatch.hasMatch()) {
+ const int currentNum = rmatch.captured(1).toInt();
+ const QString number = QString::number(currentNum + 1);
+ basename.replace(rmatch.capturedStart(1), rmatch.capturedLength(1), number);
+ } else {
+ // number does not exist, so just append " (1)" to filename
+ basename += QLatin1String(" (1)");
+ }
+
+ return basename + nameSuffix;
+}
+
+QString KFileUtils::suggestName(const QUrl &baseURL, const QString &oldName)
+{
+ QString suggestedName = makeSuggestedName(oldName);
+
+ if (baseURL.isLocalFile()) {
+ const QString basePath = baseURL.toLocalFile() + QLatin1Char('/');
+ while (QFileInfo::exists(basePath + suggestedName)) {
+ suggestedName = makeSuggestedName(suggestedName);
+ }
+ }
+
+ return suggestedName;
+}
+
+QStringList KFileUtils::findAllUniqueFiles(const QStringList &dirs, const QStringList &nameFilters)
+{
+ QStringList foundFilePaths;
+ QSet<QString> foundFileNames;
+ for (const QString &dir : dirs) {
+ QDirIterator it(dir, nameFilters, QDir::Files);
+ while (it.hasNext()) {
+ it.next();
+ if (!foundFileNames.contains(it.fileName())) {
+ foundFilePaths << it.filePath();
+ foundFileNames << it.fileName();
+ }
+ }
+ }
+ return foundFilePaths;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2000-2005 David Faure <faure@kde.org>
+ SPDX-FileCopyrightText: 2021 Alexander Lohnau <alexander.lohnau@gmx.de>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+#ifndef KFILEUTILS_H
+#define KFILEUTILS_H
+
+#include "kcoreaddons_export.h"
+
+#include <QString>
+#include <QUrl>
+
+/**
+ * @short A namespace for KFileUtils globals
+ *
+ */
+namespace KFileUtils
+{
+/**
+ * Given a directory path and a string representing a file or directory
+ * (which usually exist already), this function returns a suggested name
+ * for a file/directory that doesn't exist in @p baseURL.
+ *
+ * The suggested file name is of the form "foo (1)", "foo (2)" etc.
+ *
+ * For local URLs, this function will check if there is already a file/directory
+ * with the new suggested name and will keep incrementing the number in the above
+ * format until it finds one that doesn't exist. Note that this function uses a
+ * blocking I/O call (using QFileInfo) to check the existence of the file/directory,
+ * this could be problematic for network mounts (e.g. SMB, NFS) as these are treated
+ * as local files by the upstream QFile code. An alternative is to use makeSuggestedName()
+ * and use KIO to stat the new file/directory in an asynchronous way.
+ *
+ * @since 5.61
+ */
+KCOREADDONS_EXPORT QString suggestName(const QUrl &baseURL, const QString &oldName);
+
+/**
+ * Given a string, "foo", representing a file/directory (which usually exists already),
+ * this function returns a suggested name for a file/directory in the form "foo (1)",
+ * "foo (2)" etc.
+ *
+ * Unlike the suggestName() method, this function doesn't check if there is a file/directory
+ * with the newly suggested name; the idea being that this responsibility falls on
+ * the caller, e.g. one can use KIO::stat() to check asynchronously whether the new
+ * name already exists (in its parent directory) or not.
+ *
+ * @since 5.76
+ */
+KCOREADDONS_EXPORT QString makeSuggestedName(const QString &oldName);
+
+/**
+ * Locates all files matching the @p nameFilters in the given @p dirs
+ * The returned list does not contain duplicate file names.
+ * In case there are multiple files the one which comes first in the dirs list is returned.
+ * For example:
+ * @code
+ QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("krunner/dbusplugins"), QStandardPaths::LocateDirectory);
+ KFileUtils::findAllUniqueFiles(dirs, QStringList{QStringLiteral("*.desktop")});
+ * @endcode
+ * @param location standard location for the dir
+ * @param dir directory in which the files are located
+ * @param nameFilters filters that get passed to the QDirIterator that is used internally to
+ * iterate over the files in each dir in the list
+ * @return list of absolute file paths
+ * @since 5.85
+ */
+KCOREADDONS_EXPORT QStringList findAllUniqueFiles(const QStringList &dirs, const QStringList &nameFilters = {});
+}
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2006 Michaël Larouche <michael.larouche@kdemail.net>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+#include "kmessage.h"
+
+#include <iostream>
+
+class StaticMessageHandler
+{
+public:
+ StaticMessageHandler()
+ {
+ }
+ ~StaticMessageHandler()
+ {
+ delete m_handler;
+ }
+ StaticMessageHandler(const StaticMessageHandler &) = delete;
+ StaticMessageHandler &operator=(const StaticMessageHandler &) = delete;
+
+ /* Sets the new message handler and deletes the old one */
+ void setHandler(KMessageHandler *handler)
+ {
+ delete m_handler;
+ m_handler = handler;
+ }
+ KMessageHandler *handler() const
+ {
+ return m_handler;
+ }
+
+protected:
+ KMessageHandler *m_handler = nullptr;
+};
+Q_GLOBAL_STATIC(StaticMessageHandler, s_messageHandler)
+
+static void internalMessageFallback(KMessage::MessageType messageType, const QString &text, const QString &caption)
+{
+ QString prefix;
+ switch (messageType) {
+ case KMessage::Error:
+ prefix = QStringLiteral("ERROR: ");
+ break;
+ case KMessage::Fatal:
+ prefix = QStringLiteral("FATAL: ");
+ break;
+ case KMessage::Information:
+ prefix = QStringLiteral("INFORMATION: ");
+ break;
+ case KMessage::Sorry:
+ prefix = QStringLiteral("SORRY: ");
+ break;
+ case KMessage::Warning:
+ prefix = QStringLiteral("WARNING: ");
+ break;
+ }
+
+ QString message;
+
+ if (!caption.isEmpty()) {
+ message += QLatin1Char('(') + caption + QLatin1Char(')');
+ }
+
+ message += prefix + text;
+
+ // Show a message to the developer to setup a KMessageHandler
+ std::cerr << "WARNING: Please setup an KMessageHandler with KMessage::setMessageHandler to display message propertly." << std::endl;
+ // Show message to stdout
+ std::cerr << qPrintable(message) << std::endl;
+}
+
+void KMessage::setMessageHandler(KMessageHandler *handler)
+{
+ // Delete old message handler.
+ s_messageHandler()->setHandler(handler);
+}
+
+void KMessage::message(KMessage::MessageType messageType, const QString &text, const QString &caption)
+{
+ // Use current message handler if available, else use stdout
+ if (s_messageHandler()->handler()) {
+ s_messageHandler()->handler()->message(messageType, text, caption);
+ } else {
+ internalMessageFallback(messageType, text, caption);
+ }
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2006 Michaël Larouche <michael.larouche@kdemail.net>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+#ifndef KDECORE_KMESSAGE_H
+#define KDECORE_KMESSAGE_H
+
+#include <kcoreaddons_export.h>
+
+#include <QString>
+
+class KMessageHandler;
+/**
+ * @brief Display an informative message using a KMessageHandler.
+ *
+ * This class does not define how to display a message, it is just
+ * a clean interface for developers to use.
+ * The job is done by the current KMessageHandler set in the class.
+ *
+ * If no KMessageHandler is currently registered in KMessage,
+ * the message will be outputed to stderr.
+ *
+ * Use KMessage::setMessageHandler() to use a KMessageHandler.
+ *
+ * @code
+ * KMessage::setMessageHandler( new KMessageBoxHandler(this) );
+ * // some operation
+ *
+ * KMessage::message( KMessage::Error, i18n("Could not load service. Use kbuildsycoca to fix the service database."), i18n("KService") );
+ * @endcode
+ *
+ * Some KMessageHandler are already done such as KMessageBoxMessageHandler and KPassivePopupMessageHandler.
+ * @author Michaël Larouche <michael.larouche@kdemail.net>
+ */
+namespace KMessage
+{
+enum MessageType {
+ /**
+ * Error message.
+ * Display critical information that affect the behavior of the application.
+ */
+ Error,
+ /**
+ * Information message.
+ * Display useful information to the user.
+ */
+ Information,
+ /**
+ * Warning message.
+ * Display a message that could affect the behavior of the application.
+ */
+ Warning,
+ /**
+ * Sorry message.
+ * Display a message explaining that a task couldn't be accomplished.
+ */
+ Sorry,
+ /**
+ * Fatal message.
+ * Display a message before the application fail and close itself.
+ */
+ Fatal,
+};
+
+/**
+ * @brief Display a long message of a certain type.
+ * A long message span on multiple lines and can have a caption.
+ *
+ * @param messageType Currrent type of message. See MessageType enum.
+ * @param text Long message to be displayed.
+ * @param caption Caption to be used. This is optional.
+ */
+KCOREADDONS_EXPORT void message(KMessage::MessageType messageType, const QString &text, const QString &caption = QString());
+
+/**
+ * @brief Set the current KMessageHandler
+ * Note that this method takes ownership of the KMessageHandler.
+ * @param handler Instance of a real KMessageHandler.
+ *
+ * @warning This function isn't thread-safe. You don't want to
+ * change the message handler during the program's
+ * execution anyways. Do so <b>only</b> at start-up.
+ */
+KCOREADDONS_EXPORT void setMessageHandler(KMessageHandler *handler);
+}
+
+/**
+ * \class KMessageHandler kmessage.h <KMessageHandler>
+ *
+ * @brief Abstract class for KMessage handler.
+ * This class define how KMessage display a message.
+ *
+ * Reimplement the virtual methods then set your custom
+ * KMessageHandler using KMessage::setMessageHandler()
+ *
+ * @author Michaël Larouche <michael.larouche@kdemail.net>
+ */
+class KCOREADDONS_EXPORT KMessageHandler
+{
+public:
+ virtual ~KMessageHandler()
+ {
+ } // KF6 TODO: de-inline (-Wweak-vtables)
+ /**
+ * @brief Display a long message of a certain type.
+ * A long message span on multiple lines and can have a caption.
+ *
+ * @param type Currrent type of message. See MessageType enum.
+ * @param text Long message to be displayed.
+ * @param caption Caption to be used. This is optional.
+ */
+ virtual void message(KMessage::MessageType type, const QString &text, const QString &caption) = 0;
+};
+
+#endif
--- /dev/null
+/*
+ This software is a contribution of the LiMux project of the city of Munich.
+ SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "knetworkmounts.h"
+#include "knetworkmounts_p.h"
+
+#include <QCoreApplication>
+#include <QGlobalStatic>
+
+#include <QDebug>
+#include <QDir>
+#include <QStandardPaths>
+
+KNetworkMountsPrivate::KNetworkMountsPrivate(KNetworkMounts *q)
+ : q(q)
+{
+}
+
+KNetworkMounts *KNetworkMounts::self()
+{
+ static KNetworkMounts s_self;
+ return &s_self;
+}
+
+KNetworkMounts::KNetworkMounts()
+ : d(new KNetworkMountsPrivate(this))
+{
+ const QString configFileName = QStringLiteral("%1/network_mounts").arg(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation));
+ d->m_settings = new QSettings(configFileName, QSettings::Format::IniFormat, this);
+
+ for (const auto type : {KNetworkMounts::NfsPaths, KNetworkMounts::SmbPaths, KNetworkMounts::SymlinkDirectory, KNetworkMounts::SymlinkToNetworkMount}) {
+ QString typeStr = enumToString(type);
+ QStringList slowPaths = d->m_settings->value(typeStr, QStringList()).toStringList();
+
+ if (ensureTrailingSlashes(&slowPaths)) {
+ d->m_settings->setValue(typeStr, slowPaths);
+ }
+ }
+}
+
+KNetworkMounts::~KNetworkMounts()
+{
+}
+
+bool KNetworkMounts::isSlowPath(const QString &path, KNetworkMountsType type)
+{
+ return !getMatchingPath(path, paths(type)).isEmpty();
+}
+
+bool KNetworkMounts::isOptionEnabledForPath(const QString &path, KNetworkMountOption option)
+{
+ if (!isEnabled()) {
+ return false;
+ }
+
+ if (!isSlowPath(path)) {
+ return false;
+ }
+
+ return isOptionEnabled(option, true);
+}
+
+bool KNetworkMounts::isEnabled() const
+{
+ return d->m_settings->value(QStringLiteral("EnableOptimizations"), false).toBool();
+}
+
+void KNetworkMounts::setEnabled(const bool value)
+{
+ d->m_settings->setValue(QStringLiteral("EnableOptimizations"), value);
+}
+
+bool KNetworkMounts::isOptionEnabled(const KNetworkMountOption option, const bool defaultValue) const
+{
+ return d->m_settings->value(enumToString(option), defaultValue).toBool();
+}
+
+void KNetworkMounts::setOption(const KNetworkMountOption option, const bool value)
+{
+ d->m_settings->setValue(enumToString(option), value);
+}
+
+QStringList KNetworkMounts::paths(KNetworkMountsType type) const
+{
+ if (type == Any) {
+ QStringList paths;
+ paths.reserve(4);
+ for (const auto type : {KNetworkMounts::NfsPaths, KNetworkMounts::SmbPaths, KNetworkMounts::SymlinkDirectory, KNetworkMounts::SymlinkToNetworkMount}) {
+ paths.append(d->m_settings->value(enumToString(type), QStringList()).toStringList());
+ }
+ return paths;
+ } else {
+ return d->m_settings->value(enumToString(type), QStringList()).toStringList();
+ }
+}
+
+void KNetworkMounts::setPaths(const QStringList &paths, KNetworkMountsType type)
+{
+ QStringList _paths(paths);
+ ensureTrailingSlashes(&_paths);
+ d->m_settings->setValue(enumToString(type), _paths);
+}
+
+void KNetworkMounts::addPath(const QString &path, KNetworkMountsType type)
+{
+ QString _path(path);
+ ensureTrailingSlash(&_path);
+ QStringList newPaths = paths(type);
+ newPaths.append(_path);
+ d->m_settings->setValue(enumToString(type), newPaths);
+}
+
+typedef QHash<QString /*symlink*/, QString /*canonical path*/> symlinkCanonicalPathHash;
+Q_GLOBAL_STATIC(symlinkCanonicalPathHash, s_canonicalLinkSpacePaths);
+
+QString KNetworkMounts::canonicalSymlinkPath(const QString &path)
+{
+ bool useCache = isOptionEnabled(KNetworkMountOption::SymlinkPathsUseCache, true);
+ if (useCache) {
+ const QString resolved = s_canonicalLinkSpacePaths->value(path);
+
+ if (!resolved.isEmpty()) {
+ return resolved;
+ }
+ }
+
+ QString symlinkPath = getMatchingPath(path, paths(KNetworkMountsType::SymlinkToNetworkMount));
+ if (!symlinkPath.isEmpty()) {
+ // remove trailing slash
+ symlinkPath.chop(1);
+
+ QFileInfo link(symlinkPath);
+ QString linkPath(path);
+ QString target = link.symLinkTarget();
+
+ if (target.isEmpty()) {
+ // not a symlink
+ if (useCache) {
+ s_canonicalLinkSpacePaths->insert(path, path);
+ }
+ return path;
+ } else {
+ // symlink
+ // replace only the first occurence of symlinkPath in linkPath with the link target
+ // linkPath.startsWith(symlinkPath) because of getMatchingPath
+ linkPath.replace(0, symlinkPath.size(), target);
+
+ if (useCache) {
+ s_canonicalLinkSpacePaths->insert(path, linkPath);
+ }
+ return linkPath;
+ }
+ }
+
+ QString linkSpacePath = getMatchingPath(path, paths(KNetworkMountsType::SymlinkDirectory));
+ if (!linkSpacePath.isEmpty()) {
+ QString _path = path;
+ if (!_path.endsWith(QLatin1Char('/'))) {
+ _path.append(QLatin1Char('/'));
+ }
+
+ if (_path == linkSpacePath) {
+ if (useCache) {
+ s_canonicalLinkSpacePaths->insert(path, path);
+ }
+ return path;
+ }
+
+ // search for symlink, linkSpacePath always ends with '/'
+ int linkIndex = path.indexOf(QLatin1Char('/'), linkSpacePath.length());
+ const QString symlink = path.left(linkIndex);
+
+ if (useCache && s_canonicalLinkSpacePaths->contains(symlink)) {
+ QString linkPath(path);
+ // replace only the first occurence of symlink in linkPath
+ linkPath.replace(0, symlink.size(), s_canonicalLinkSpacePaths->value(symlink));
+ s_canonicalLinkSpacePaths->insert(path, linkPath);
+ return linkPath;
+ } else {
+ QFileInfo link(symlink);
+
+ if (link.isSymLink()) {
+ QString linkPath(path);
+ // replace only the first occurence of symlink in linkPath
+ linkPath.replace(0, symlink.size(), link.symLinkTarget());
+
+ if (useCache) {
+ s_canonicalLinkSpacePaths->insert(path, linkPath);
+ }
+ return linkPath;
+ } else {
+ if (useCache) {
+ s_canonicalLinkSpacePaths->insert(path, path);
+ }
+ }
+ }
+ }
+
+ return path;
+}
+
+void KNetworkMounts::clearCache()
+{
+ if (s_canonicalLinkSpacePaths.exists()) {
+ s_canonicalLinkSpacePaths->clear();
+ }
+}
+
+void KNetworkMounts::sync()
+{
+ d->m_settings->sync();
+}
--- /dev/null
+/*
+ This software is a contribution of the LiMux project of the city of Munich.
+ SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#ifndef KNETWORKMOUNTS_H
+#define KNETWORKMOUNTS_H
+
+#include <memory>
+
+#include <QObject>
+#include <kcoreaddons_export.h>
+
+/**
+ * \class KNetworkMounts knetworkmounts.h <KCoreAddons/KNetworkMounts>
+ *
+ * Performance control on network mounts.
+ *
+ * This class provides methods for deciding whether operations
+ * on slow network mounts should be performed or not.
+ *
+ * Configuration is read from a configuration file network_mounts in
+ * the user's QStandardPaths::ConfigLocation. This file can be filled by using
+ * the network mounts performance configuration module or directly via @ref setEnabled,
+ * @ref setPaths, @ref addPath and @ref setOption
+ * @code
+ * KNetworkMounts::self()->setEnabled(true);
+ * KNetworkMounts::self()->setOption(KNetworkMounts::LowSideEffectsOptimizations, true);
+ * KNetworkMounts::self()->addPath(path1, KNetworkMounts::NfsPaths);
+ * KNetworkMounts::self()->addPath(path2, KNetworkMounts::NfsPaths);
+ * KNetworkMounts::self()->setPaths(listOfPaths, KNetworkMounts::SmbPaths);
+ * @endcode
+ *
+ * Use KNetworkMounts like this to check if the given url is on a
+ * configured slow path and the KNetworkMountOption LowSideEffectsOptimizations
+ * is enabled:
+ * @code
+ * if (KNetworkMounts::self()->isOptionEnabledForPath(url.toLocalFile(),
+ * KNetworkMounts::LowSideEffectsOptimizations))
+ * {
+ * // skip operations which are slow on the given url if
+ * // KNetworkMountOption LowSideEffectsOptimizations is enabled
+ * } else {
+ * // given url is not configured being slow or the KNetworkMountOption
+ * // LowSideEffectsOptimizations is not enabled
+ * }
+ * @endcode
+ *
+ * If called for the first time, this creates a singleton instance and reads
+ * the config file. Subsequent calls just use this instance without reading
+ * the config file again.
+ *
+ * @author Robert Hoffmann <robert@roberthoffmann.de>
+ *
+ * @since 5.85
+ **/
+class KCOREADDONS_EXPORT KNetworkMounts : public QObject
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Returns (and creates if necessary) the singleton instance
+ *
+ * @return the singleton instance
+ */
+ static KNetworkMounts *self();
+
+ /**
+ * The KNetworkMountOption enum
+ *
+ * Uses are:
+ */
+ enum KNetworkMountOption {
+ LowSideEffectsOptimizations, ///< Don't run KDiskFreeSpaceInfo if slow path.<br>
+ ///< Don't check for manually mounted drives.<br>
+ ///< Don't check with QFileInfo::isWritable if it is writable, if not yet known, return true.<br>
+ ///< Don't check with QFileInfo::isReadable if it is readable, return false.<br>
+ ///< Don't check for desktop files just return false.<br>
+ ///< Ignore .hidden files on slow paths.<br>
+ ///< Don't read mime comment from .desktop or .directory files.<br>
+ ///< Don't get the size with QFileInfo::size, just return 0, if not yet known.<br>
+ ///< Don't determine mime type from file content, use file extension.<br>
+ ///< Don't check for desktop files just return false.<br>
+ ///< Don't call KFileSystemType::fileSystemType to check if the filesystem is slow, just return true.<br>
+ ///< Don't count files/directories in subdirectories.<br>
+ ///< Don't calculate sizes of subdirectories.<br>
+ ///< Avoid check for dir at Kate startup
+ MediumSideEffectsOptimizations, ///< Don't return project for dir, avoid QFileInfo().absoluteDir()<br>
+ ///< Don't search for .kateconfig recursively<br>
+ ///< Ignore recent files on slow paths
+ StrongSideEffectsOptimizations, ///< Turn off symbolic link resolution
+ KDirWatchUseINotify, ///< Use Inotify on the path (instead of FAM on NFS mounts). Inotify detects changes only locally, FAM works also remotely with NFS
+ KDirWatchDontAddWatches, ///< Disables dir watching completely for slow paths, avoids stat() calls on added dirs and subdirs
+ SymlinkPathsUseCache ///< Cache resolved symlink paths
+ };
+ Q_ENUM(KNetworkMountOption)
+
+ /**
+ * The KNetworkMountsType enum
+ */
+ enum KNetworkMountsType {
+ NfsPaths, ///< NFS paths
+ SmbPaths, ///< SMB paths
+ SymlinkDirectory, ///< Paths to directories which contain symbolic links to network mounts
+ SymlinkToNetworkMount, ///< Paths which are symbolic links to network mounts
+ Any ///< Any slow path type. Do not use with @ref setPaths or @ref addPath
+ };
+ Q_ENUM(KNetworkMountsType)
+
+ /**
+ * Query if @p path is configured to be a slow path of type @p type
+ *
+ * @param path the path to query
+ * @param type the type to query. If omitted, any type matches
+ * @return @c true if @p path is a configured slow path of type @p type
+ *
+ * This function is also used to determine the filesystem type in @ref KFileSystemType::fileSystemType
+ * (KFileSystemType::Smb or KFileSystemType::Nfs) without an expensive call to stafs(). For this
+ * to work the types of paths need to be correctly assigned in @ref setPath or @ref addPath
+ */
+ bool isSlowPath(const QString &path, KNetworkMountsType type = Any);
+
+ /**
+ * Query if @p path is configured to be a slow path and @p option is enabled
+ *
+ * @param path the path to query
+ * @param option the option to query
+ * @return @c true if @p path is a configured slow path and option @p option is enabled
+ */
+ bool isOptionEnabledForPath(const QString &path, KNetworkMountOption option);
+
+ /**
+ * Query if the performance optimizations are switched on
+ *
+ * @return @c true if on, @c false otherwise
+ */
+ bool isEnabled() const;
+
+ /**
+ * Switch the performance optimizations on or off
+ *
+ * @param value the value to set
+ */
+ void setEnabled(bool value);
+
+ /**
+ * Query a performance option
+ *
+ * @param option the option to query
+ * @param defaultValue the value to return if the option is not configured
+ * @return @c true if option is on, @c false if not
+ * @see KNetworkMountOption
+ */
+ bool isOptionEnabled(const KNetworkMountOption option, const bool defaultValue = false) const;
+
+ /**
+ * Switch a performance option on or off
+ *
+ * @param option the option to change
+ * @param value the value to set
+ * @see KNetworkMountOption
+ */
+ void setOption(const KNetworkMountOption option, const bool value);
+
+ /**
+ * Query the configured paths for which optimizations are to take place
+ *
+ * @return a list of paths
+ */
+ QStringList paths(KNetworkMountsType type = Any) const;
+
+ /**
+ * Set the paths for which optimizations are to take place
+ *
+ * @param paths the paths to set
+ * @param type the type of paths. Do not use @ref Any
+ * @see KNetworkMountsType
+ */
+ void setPaths(const QStringList &paths, KNetworkMountsType type);
+
+ /**
+ * Add a path for which optimizations are to take place
+ *
+ * @param path the path to add
+ * @param type the type of the path. Do not use @ref Any
+ * @see KNetworkMountsType
+ */
+ void addPath(const QString &path, KNetworkMountsType type);
+
+ /**
+ * Resolves a @p path that may contain symbolic links to mounted network shares.
+ *
+ * A symlink path is either a directory which contains symbolic links to slow network mounts
+ * (@ref SymlinkDirectory) or a direct symbolic link to a slow network mount (@ref
+ * SymlinkToNfsOrSmbPaths).
+ *
+ * Example:
+ * There are some Samba shares mounted below /mnt. These are @ref paths of type @ref SmbPaths
+ * @code
+ * /mnt/server1/share1
+ * /mnt/server1/share2
+ * /mnt/server2/share3
+ * @endcode
+ *
+ * A (logged in) user may have symbolic links to them in his home directory below netshares. The
+ * directory /home/user/netshares is a @ref SymlinkDirectory:
+ * @code
+ * /home/user/netshares/share1 -> /mnt/server1/share1
+ * /home/user/netshares/share2 -> /mnt/server1/share2
+ * /home/user/netshares/share3 -> /mnt/server2/share3
+ * @endcode
+ *
+ * There is a direct symbolic link from /home/user/share1 to /mnt/server1/share1. This is of type
+ * @ref SymlinkToNfsOrSmbPaths:
+ * @code
+ * /home/user/share1 -> /mnt/server1/share1
+ * @endcode
+ *
+ * Both types of symbolic links from symlink paths to the real mounted shares are resolved even if
+ * KNetworkMountOption @ref StrongSideEffectsOptimizations is enabled.
+
+ * If the setup is like above a @p path
+ * @code
+ * /home/user/netshares/share1/Documents/file.txt
+ * @endcode
+ *
+ * would be resolved to
+ * @code
+ * /mnt/server1/share1/Documents/file.txt
+ * @endcode
+ *
+ * and a @p path
+ * @code
+ * /home/user/share1/Documents/file.txt
+ * @endcode
+ *
+ * would also be resolved to
+ * @code
+ * /mnt/server1/share1/Documents/file.txt
+ * @endcode
+ *
+ * Resolved paths are cached in a hash.
+ *
+ * @param path the path to resolve
+ * @return the resolved path or @p path if @p path is not a symlink path or no symlink found
+ * @see KNetworkMountsType
+ * @see clearCache
+ * @see isSlowPath
+ */
+ QString canonicalSymlinkPath(const QString &path);
+
+ /**
+ * Clears the canonical symlink path cache
+ *
+ * Call this if directory structures on mounted network drives changed. Don't enable the
+ * cache (@ref SymlinkPathsUseCache) if this happens often and the drives are usually accessed
+ * via the symlinks. This method exists mainly for the KCM.
+ * @see canonicalSymlinkPath
+ */
+ void clearCache();
+
+ /**
+ * Synchronizes to config file
+ *
+ * QSettings synchronization also takes place automatically at regular intervals and from
+ * QSettings destructor, see QSettings::sync() documentation.
+ *
+ * Calls QSettings::sync()
+ */
+ void sync();
+
+private:
+ /// Creates a new KNetworkMounts object
+ KNetworkMounts();
+
+ /// Destructor
+ ~KNetworkMounts();
+
+ std::unique_ptr<class KNetworkMountsPrivate> const d;
+};
+
+#endif // KNETWORKMOUNTS_H
--- /dev/null
+/*
+ This software is a contribution of the LiMux project of the city of Munich.
+ SPDX-FileCopyrightText: 2021 Robert Hoffmann <robert@roberthoffmann.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#ifndef KNETWORKMOUNTS_P_H
+#define KNETWORKMOUNTS_P_H
+
+#include "knetworkmounts.h"
+
+#include <QMetaEnum>
+#include <QSettings>
+
+class KNetworkMountsPrivate
+{
+public:
+ KNetworkMountsPrivate(KNetworkMounts *);
+
+ KNetworkMounts *q;
+
+ QSettings *m_settings;
+
+private:
+};
+
+// Append trailing slashes to path string if missing
+static bool ensureTrailingSlash(QString *path)
+{
+ bool changed = false;
+ if (!path->isEmpty() && !path->endsWith(QLatin1Char('/'))) {
+ path->append(QLatin1Char('/'));
+ changed = true;
+ }
+
+ return changed;
+}
+
+// Append trailing slashes to path strings if missing
+static bool ensureTrailingSlashes(QStringList *paths)
+{
+ bool changed = false;
+ for (QString &path : *paths) {
+ if (ensureTrailingSlash(&path)) {
+ changed = true;
+ }
+ }
+
+ return changed;
+}
+
+// Return the matching configured slow path
+static QString getMatchingPath(const QString &_path, const QStringList &slowPaths)
+{
+ if (slowPaths.isEmpty()) {
+ return QString();
+ }
+
+ QString path = _path;
+ if (!path.endsWith(QLatin1Char('/'))) {
+ path.append(QLatin1Char('/'));
+ }
+
+ for (const QString &slp : slowPaths) {
+ if (path.startsWith(slp)) {
+ return slp;
+ }
+ }
+
+ return QString();
+}
+
+// Convert the enums KNetworkMountsType and KNetworkMountOption to QString
+template<typename EnumType>
+static QString enumToString(EnumType type)
+{
+ const int intValue = static_cast<int>(type);
+ return QString::fromUtf8(QMetaEnum::fromType<EnumType>().valueToKey(intValue));
+}
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kprocess_p.h"
+
+#include <QStandardPaths>
+#include <kshell.h>
+#include <qplatformdefs.h>
+#ifdef Q_OS_WIN
+#include <kshell_p.h>
+#include <qt_windows.h>
+#endif
+
+#include <QFile>
+
+/////////////////////////////
+// public member functions //
+/////////////////////////////
+
+KProcess::KProcess(QObject *parent)
+ : QProcess(parent)
+ , d_ptr(new KProcessPrivate(this))
+{
+ setOutputChannelMode(ForwardedChannels);
+}
+
+KProcess::KProcess(KProcessPrivate *d, QObject *parent)
+ : QProcess(parent)
+ , d_ptr(d)
+{
+ d_ptr->q_ptr = this;
+ setOutputChannelMode(ForwardedChannels);
+}
+
+KProcess::~KProcess() = default;
+
+void KProcess::setOutputChannelMode(OutputChannelMode mode)
+{
+ QProcess::setProcessChannelMode(static_cast<ProcessChannelMode>(mode));
+}
+
+KProcess::OutputChannelMode KProcess::outputChannelMode() const
+{
+ return static_cast<OutputChannelMode>(QProcess::processChannelMode());
+}
+
+void KProcess::setNextOpenMode(QIODevice::OpenMode mode)
+{
+ Q_D(KProcess);
+
+ d->openMode = mode;
+}
+
+#define DUMMYENV "_KPROCESS_DUMMY_="
+
+void KProcess::clearEnvironment()
+{
+ setEnvironment(QStringList{QStringLiteral(DUMMYENV)});
+}
+
+void KProcess::setEnv(const QString &name, const QString &value, bool overwrite)
+{
+ QStringList env = environment();
+ if (env.isEmpty()) {
+ env = systemEnvironment();
+ env.removeAll(QStringLiteral(DUMMYENV));
+ }
+ QString fname(name);
+ fname.append(QLatin1Char('='));
+ for (QStringList::Iterator it = env.begin(); it != env.end(); ++it)
+ if ((*it).startsWith(fname)) {
+ if (overwrite) {
+ *it = fname.append(value);
+ setEnvironment(env);
+ }
+ return;
+ }
+ env.append(fname.append(value));
+ setEnvironment(env);
+}
+
+void KProcess::unsetEnv(const QString &name)
+{
+ QStringList env = environment();
+ if (env.isEmpty()) {
+ env = systemEnvironment();
+ env.removeAll(QStringLiteral(DUMMYENV));
+ }
+ QString fname(name);
+ fname.append(QLatin1Char('='));
+ for (QStringList::Iterator it = env.begin(); it != env.end(); ++it)
+ if ((*it).startsWith(fname)) {
+ env.erase(it);
+ if (env.isEmpty()) {
+ env.append(QStringLiteral(DUMMYENV));
+ }
+ setEnvironment(env);
+ return;
+ }
+}
+
+void KProcess::setProgram(const QString &exe, const QStringList &args)
+{
+ Q_D(KProcess);
+
+ d->prog = exe;
+ d->args = args;
+#ifdef Q_OS_WIN
+ setNativeArguments(QString());
+#endif
+}
+
+void KProcess::setProgram(const QStringList &argv)
+{
+ Q_D(KProcess);
+
+ Q_ASSERT(!argv.isEmpty());
+ d->args = argv;
+ d->prog = d->args.takeFirst();
+#ifdef Q_OS_WIN
+ setNativeArguments(QString());
+#endif
+}
+
+KProcess &KProcess::operator<<(const QString &arg)
+{
+ Q_D(KProcess);
+
+ if (d->prog.isEmpty()) {
+ d->prog = arg;
+ } else {
+ d->args << arg;
+ }
+ return *this;
+}
+
+KProcess &KProcess::operator<<(const QStringList &args)
+{
+ Q_D(KProcess);
+
+ if (d->prog.isEmpty()) {
+ setProgram(args);
+ } else {
+ d->args << args;
+ }
+ return *this;
+}
+
+void KProcess::clearProgram()
+{
+ Q_D(KProcess);
+
+ d->prog.clear();
+ d->args.clear();
+#ifdef Q_OS_WIN
+ setNativeArguments(QString());
+#endif
+}
+
+void KProcess::setShellCommand(const QString &cmd)
+{
+ Q_D(KProcess);
+
+ KShell::Errors err;
+ d->args = KShell::splitArgs(cmd, KShell::AbortOnMeta | KShell::TildeExpand, &err);
+ if (err == KShell::NoError && !d->args.isEmpty()) {
+ d->prog = QStandardPaths::findExecutable(d->args[0]);
+ if (!d->prog.isEmpty()) {
+ d->args.removeFirst();
+#ifdef Q_OS_WIN
+ setNativeArguments(QString());
+#endif
+ return;
+ }
+ }
+
+ d->args.clear();
+
+#ifdef Q_OS_UNIX
+// #ifdef NON_FREE // ... as they ship non-POSIX /bin/sh
+#if !defined(__linux__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__) && !defined(__GNU__) \
+ && !defined(__APPLE__)
+ // If /bin/sh is a symlink, we can be pretty sure that it points to a
+ // POSIX shell - the original bourne shell is about the only non-POSIX
+ // shell still in use and it is always installed natively as /bin/sh.
+ d->prog = QFile::symLinkTarget(QStringLiteral("/bin/sh"));
+ if (d->prog.isEmpty()) {
+ // Try some known POSIX shells.
+ d->prog = QStandardPaths::findExecutable(QStringLiteral("ksh"));
+ if (d->prog.isEmpty()) {
+ d->prog = QStandardPaths::findExecutable(QStringLiteral("ash"));
+ if (d->prog.isEmpty()) {
+ d->prog = QStandardPaths::findExecutable(QStringLiteral("bash"));
+ if (d->prog.isEmpty()) {
+ d->prog = QStandardPaths::findExecutable(QStringLiteral("zsh"));
+ if (d->prog.isEmpty())
+ // We're pretty much screwed, to be honest ...
+ {
+ d->prog = QStringLiteral("/bin/sh");
+ }
+ }
+ }
+ }
+ }
+#else
+ d->prog = QStringLiteral("/bin/sh");
+#endif
+
+ d->args << QStringLiteral("-c") << cmd;
+#else // Q_OS_UNIX
+ // KMacroExpander::expandMacrosShellQuote(), KShell::quoteArg() and
+ // KShell::joinArgs() may generate these for security reasons.
+ setEnv(PERCENT_VARIABLE, QStringLiteral("%"));
+
+#ifndef _WIN32_WCE
+ WCHAR sysdir[MAX_PATH + 1];
+ UINT size = GetSystemDirectoryW(sysdir, MAX_PATH + 1);
+ d->prog = QString::fromUtf16((const ushort *)sysdir, size);
+ d->prog += QLatin1String("\\cmd.exe");
+ setNativeArguments(QLatin1String("/V:OFF /S /C \"") + cmd + QLatin1Char('"'));
+#else
+ d->prog = QStringLiteral("\\windows\\cmd.exe");
+ setNativeArguments(QStringLiteral("/S /C \"") + cmd + QLatin1Char('"'));
+#endif
+#endif
+}
+
+QStringList KProcess::program() const
+{
+ Q_D(const KProcess);
+
+ QStringList argv = d->args;
+ argv.prepend(d->prog);
+ return argv;
+}
+
+void KProcess::start()
+{
+ Q_D(KProcess);
+
+ QProcess::start(d->prog, d->args, d->openMode);
+}
+
+int KProcess::execute(int msecs)
+{
+ start();
+ if (!waitForFinished(msecs)) {
+ kill();
+ waitForFinished(-1);
+ return -2;
+ }
+ return (exitStatus() == QProcess::NormalExit) ? exitCode() : -1;
+}
+
+// static
+int KProcess::execute(const QString &exe, const QStringList &args, int msecs)
+{
+ KProcess p;
+ p.setProgram(exe, args);
+ return p.execute(msecs);
+}
+
+// static
+int KProcess::execute(const QStringList &argv, int msecs)
+{
+ KProcess p;
+ p.setProgram(argv);
+ return p.execute(msecs);
+}
+
+int KProcess::startDetached()
+{
+ Q_D(KProcess);
+
+ qint64 pid;
+ if (!QProcess::startDetached(d->prog, d->args, workingDirectory(), &pid)) {
+ return 0;
+ }
+ return static_cast<int>(pid);
+}
+
+// static
+int KProcess::startDetached(const QString &exe, const QStringList &args)
+{
+ qint64 pid;
+ if (!QProcess::startDetached(exe, args, QString(), &pid)) {
+ return 0;
+ }
+ return static_cast<int>(pid);
+}
+
+// static
+int KProcess::startDetached(const QStringList &argv)
+{
+ QStringList args = argv;
+ QString prog = args.takeFirst();
+ return startDetached(prog, args);
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 78)
+int KProcess::pid() const
+{
+ QT_WARNING_PUSH
+ QT_WARNING_DISABLE_CLANG("-Wdeprecated-declarations")
+ QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations")
+#ifdef Q_OS_UNIX
+ return static_cast<int>(QProcess::pid());
+#else
+ return QProcess::pid() ? QProcess::pid()->dwProcessId : 0;
+#endif
+ QT_WARNING_POP
+}
+#endif
+
+#include "moc_kprocess.cpp"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KPROCESS_H
+#define KPROCESS_H
+
+#include <kcoreaddons_export.h>
+
+#include <QProcess>
+
+#include <memory>
+
+class KProcessPrivate;
+
+/**
+ * \class KProcess kprocess.h <KProcess>
+ *
+ * Child process invocation, monitoring and control.
+ *
+ * This class extends QProcess by some useful functionality, overrides
+ * some defaults with saner values and wraps parts of the API into a more
+ * accessible one.
+ * Only use KProcess if you need the extra features, otherwise QProcess
+ * is the preferred way of spawning child processes.
+ *
+ * @author Oswald Buddenhagen <ossi@kde.org>
+ **/
+class KCOREADDONS_EXPORT KProcess : public QProcess
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(KProcess)
+
+public:
+ /**
+ * Modes in which the output channels can be opened.
+ */
+ enum OutputChannelMode {
+ SeparateChannels = QProcess::SeparateChannels,
+ /**< Standard output and standard error are handled by KProcess
+ as separate channels */
+ MergedChannels = QProcess::MergedChannels,
+ /**< Standard output and standard error are handled by KProcess
+ as one channel */
+ ForwardedChannels = QProcess::ForwardedChannels,
+ /**< Both standard output and standard error are forwarded
+ to the parent process' respective channel */
+ OnlyStdoutChannel = QProcess::ForwardedErrorChannel,
+ /**< Only standard output is handled; standard error is forwarded */
+ OnlyStderrChannel = QProcess::ForwardedOutputChannel,
+ /**< Only standard error is handled; standard output is forwarded */
+ };
+
+ /**
+ * Constructor
+ */
+ explicit KProcess(QObject *parent = nullptr);
+
+ /**
+ * Destructor
+ */
+ ~KProcess() override;
+
+ /**
+ * Set how to handle the output channels of the child process.
+ *
+ * The default is ForwardedChannels, which is unlike in QProcess.
+ * Do not request more than you actually handle, as this output is
+ * simply lost otherwise.
+ *
+ * This function must be called before starting the process.
+ *
+ * @param mode the output channel handling mode
+ */
+ void setOutputChannelMode(OutputChannelMode mode);
+
+ /**
+ * Query how the output channels of the child process are handled.
+ *
+ * @return the output channel handling mode
+ */
+ OutputChannelMode outputChannelMode() const;
+
+ /**
+ * Set the QIODevice open mode the process will be opened in.
+ *
+ * This function must be called before starting the process, obviously.
+ *
+ * @param mode the open mode. Note that this mode is automatically
+ * "reduced" according to the channel modes and redirections.
+ * The default is QIODevice::ReadWrite.
+ */
+ void setNextOpenMode(QIODevice::OpenMode mode);
+
+ /**
+ * Adds the variable @p name to the process' environment.
+ *
+ * This function must be called before starting the process.
+ *
+ * @param name the name of the environment variable
+ * @param value the new value for the environment variable
+ * @param overwrite if @c false and the environment variable is already
+ * set, the old value will be preserved
+ */
+ void setEnv(const QString &name, const QString &value, bool overwrite = true);
+
+ /**
+ * Removes the variable @p name from the process' environment.
+ *
+ * This function must be called before starting the process.
+ *
+ * @param name the name of the environment variable
+ */
+ void unsetEnv(const QString &name);
+
+ /**
+ * Empties the process' environment.
+ *
+ * Note that LD_LIBRARY_PATH/DYLD_LIBRARY_PATH is automatically added
+ * on *NIX.
+ *
+ * This function must be called before starting the process.
+ */
+ void clearEnvironment();
+
+ /**
+ * Set the program and the command line arguments.
+ *
+ * This function must be called before starting the process, obviously.
+ *
+ * @param exe the program to execute
+ * @param args the command line arguments for the program,
+ * one per list element
+ */
+ void setProgram(const QString &exe, const QStringList &args = QStringList());
+
+ /**
+ * @overload
+ *
+ * @param argv the program to execute and the command line arguments
+ * for the program, one per list element
+ */
+ void setProgram(const QStringList &argv);
+
+ /**
+ * Append an element to the command line argument list for this process.
+ *
+ * If no executable is set yet, it will be set instead.
+ *
+ * For example, doing an "ls -l /usr/local/bin" can be achieved by:
+ * \code
+ * KProcess p;
+ * p << "ls" << "-l" << "/usr/local/bin";
+ * ...
+ * \endcode
+ *
+ * This function must be called before starting the process, obviously.
+ *
+ * @param arg the argument to add
+ * @return a reference to this KProcess
+ */
+ KProcess &operator<<(const QString &arg);
+
+ /**
+ * @overload
+ *
+ * @param args the arguments to add
+ * @return a reference to this KProcess
+ */
+ KProcess &operator<<(const QStringList &args);
+
+ /**
+ * Clear the program and command line argument list.
+ */
+ void clearProgram();
+
+ /**
+ * Set a command to execute through a shell (a POSIX sh on *NIX
+ * and cmd.exe on Windows).
+ *
+ * Using this for anything but user-supplied commands is usually a bad
+ * idea, as the command's syntax depends on the platform.
+ * Redirections including pipes, etc. are better handled by the
+ * respective functions provided by QProcess.
+ *
+ * If KProcess determines that the command does not really need a
+ * shell, it will transparently execute it without one for performance
+ * reasons.
+ *
+ * This function must be called before starting the process, obviously.
+ *
+ * @param cmd the command to execute through a shell.
+ * The caller must make sure that all filenames etc. are properly
+ * quoted when passed as argument. Failure to do so often results in
+ * serious security holes. See KShell::quoteArg().
+ */
+ void setShellCommand(const QString &cmd);
+
+ /**
+ * Obtain the currently set program and arguments.
+ *
+ * @return a list, the first element being the program, the remaining ones
+ * being command line arguments to the program.
+ */
+ QStringList program() const;
+
+ /**
+ * Start the process.
+ *
+ * @see QProcess::start(const QString &, const QStringList &, OpenMode)
+ */
+ void start();
+
+ /**
+ * Start the process, wait for it to finish, and return the exit code.
+ *
+ * This method is roughly equivalent to the sequence:
+ * @code
+ * start();
+ * waitForFinished(msecs);
+ * return exitCode();
+ * @endcode
+ *
+ * Unlike the other execute() variants this method is not static,
+ * so the process can be parametrized properly and talked to.
+ *
+ * @param msecs time to wait for process to exit before killing it
+ * @return -2 if the process could not be started, -1 if it crashed,
+ * otherwise its exit code
+ */
+ int execute(int msecs = -1);
+
+ /**
+ * @overload
+ *
+ * @param exe the program to execute
+ * @param args the command line arguments for the program,
+ * one per list element
+ * @param msecs time to wait for process to exit before killing it
+ * @return -2 if the process could not be started, -1 if it crashed,
+ * otherwise its exit code
+ */
+ static int execute(const QString &exe, const QStringList &args = QStringList(), int msecs = -1);
+
+ /**
+ * @overload
+ *
+ * @param argv the program to execute and the command line arguments
+ * for the program, one per list element
+ * @param msecs time to wait for process to exit before killing it
+ * @return -2 if the process could not be started, -1 if it crashed,
+ * otherwise its exit code
+ */
+ static int execute(const QStringList &argv, int msecs = -1);
+
+ /**
+ * Start the process and detach from it. See QProcess::startDetached()
+ * for details.
+ *
+ * Unlike the other startDetached() variants this method is not static,
+ * so the process can be parametrized properly.
+ * @note Currently, only the setProgram()/setShellCommand() and
+ * setWorkingDirectory() parametrizations are supported.
+ *
+ * The KProcess object may be re-used immediately after calling this
+ * function.
+ *
+ * @return the PID of the started process or 0 on error
+ */
+ int startDetached();
+
+ /**
+ * @overload
+ *
+ * @param exe the program to start
+ * @param args the command line arguments for the program,
+ * one per list element
+ * @return the PID of the started process or 0 on error
+ */
+ static int startDetached(const QString &exe, const QStringList &args = QStringList());
+
+ /**
+ * @overload
+ *
+ * @param argv the program to start and the command line arguments
+ * for the program, one per list element
+ * @return the PID of the started process or 0 on error
+ */
+ static int startDetached(const QStringList &argv);
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 78)
+ /**
+ * Obtain the process' ID as known to the system.
+ *
+ * Unlike with QProcess::pid(), this is a real PID also on Windows.
+ *
+ * This function can be called only while the process is running.
+ * It cannot be applied to detached processes.
+ *
+ * @return the process ID
+ * @deprecated since 5.78, use processId()
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 78, "Use processId()")
+ int pid() const;
+#endif
+
+protected:
+ /**
+ * @internal
+ */
+ KProcess(KProcessPrivate *d, QObject *parent);
+
+ /**
+ * @internal
+ */
+ std::unique_ptr<KProcessPrivate> const d_ptr;
+
+private:
+ // hide those
+#if QT_DEPRECATED_SINCE(5, 13)
+ using QProcess::readChannelMode;
+ using QProcess::setReadChannelMode;
+#endif
+ using QProcess::processChannelMode;
+ using QProcess::setProcessChannelMode;
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KPROCESS_P_H
+#define KPROCESS_P_H
+
+#include "kprocess.h"
+
+class KProcessPrivate
+{
+ Q_DECLARE_PUBLIC(KProcess)
+protected:
+ KProcessPrivate(KProcess *q)
+ : openMode(QIODevice::ReadWrite)
+ , q_ptr(q)
+ {
+ }
+
+ QString prog;
+ QStringList args;
+ QIODevice::OpenMode openMode;
+
+ KProcess *q_ptr;
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2005-2012 David Faure <faure@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kurlmimedata.h"
+#include <QMimeData>
+#include <QStringList>
+
+static QString kdeUriListMime()
+{
+ return QStringLiteral("application/x-kde4-urilist");
+} // keep this name "kde4" for compat.
+
+static QByteArray uriListData(const QList<QUrl> &urls)
+{
+ // compatible with qmimedata.cpp encoding of QUrls
+ QByteArray result;
+ for (int i = 0; i < urls.size(); ++i) {
+ result += urls.at(i).toEncoded();
+ result += "\r\n";
+ }
+ return result;
+}
+
+void KUrlMimeData::setUrls(const QList<QUrl> &urls, const QList<QUrl> &mostLocalUrls, QMimeData *mimeData)
+{
+ // Export the most local urls as text/uri-list and plain text, for non KDE apps.
+ mimeData->setUrls(mostLocalUrls); // set text/uri-list and text/plain
+
+ // Export the real KIO urls as a kde-specific mimetype
+ mimeData->setData(kdeUriListMime(), uriListData(urls));
+}
+
+void KUrlMimeData::setMetaData(const MetaDataMap &metaData, QMimeData *mimeData)
+{
+ QByteArray metaDataData; // :)
+ for (MetaDataMap::const_iterator it = metaData.begin(); it != metaData.end(); ++it) {
+ metaDataData += it.key().toUtf8();
+ metaDataData += "$@@$";
+ metaDataData += it.value().toUtf8();
+ metaDataData += "$@@$";
+ }
+ mimeData->setData(QStringLiteral("application/x-kio-metadata"), metaDataData);
+}
+
+QStringList KUrlMimeData::mimeDataTypes()
+{
+ return QStringList{kdeUriListMime(), QStringLiteral("text/uri-list")};
+}
+
+static QList<QUrl> extractKdeUriList(const QMimeData *mimeData)
+{
+ QList<QUrl> uris;
+ const QByteArray ba = mimeData->data(kdeUriListMime());
+ // Code from qmimedata.cpp
+ QList<QByteArray> urls = ba.split('\n');
+ uris.reserve(urls.size());
+ for (int i = 0; i < urls.size(); ++i) {
+ QByteArray data = urls.at(i).trimmed();
+ if (!data.isEmpty()) {
+ uris.append(QUrl::fromEncoded(data));
+ }
+ }
+ return uris;
+}
+
+QList<QUrl> KUrlMimeData::urlsFromMimeData(const QMimeData *mimeData, DecodeOptions decodeOptions, MetaDataMap *metaData)
+{
+ QList<QUrl> uris;
+ if (decodeOptions == PreferLocalUrls) {
+ // Extracting uris from text/uri-list, use the much faster QMimeData method urls()
+ uris = mimeData->urls();
+ if (uris.isEmpty()) {
+ uris = extractKdeUriList(mimeData);
+ }
+ } else {
+ uris = extractKdeUriList(mimeData);
+ if (uris.isEmpty()) {
+ uris = mimeData->urls();
+ }
+ }
+
+ if (metaData) {
+ const QByteArray metaDataPayload = mimeData->data(QStringLiteral("application/x-kio-metadata"));
+ if (!metaDataPayload.isEmpty()) {
+ QString str = QString::fromUtf8(metaDataPayload.constData());
+ Q_ASSERT(str.endsWith(QLatin1String("$@@$")));
+ str.chop(4);
+ const QStringList lst = str.split(QStringLiteral("$@@$"));
+ bool readingKey = true; // true, then false, then true, etc.
+ QString key;
+ for (QStringList::const_iterator it = lst.begin(); it != lst.end(); ++it) {
+ if (readingKey) {
+ key = *it;
+ } else {
+ metaData->insert(key, *it);
+ }
+ readingKey = !readingKey;
+ }
+ Q_ASSERT(readingKey); // an odd number of items would be, well, odd ;-)
+ }
+ }
+ return uris;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2005-2012 David Faure <faure@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KURLMIMEDATA_H
+#define KURLMIMEDATA_H
+
+#include "kcoreaddons_export.h"
+#include <QMap>
+#include <QUrl>
+QT_BEGIN_NAMESPACE
+class QMimeData;
+QT_END_NAMESPACE
+
+/**
+ * Utility functions for using URLs in QMimeData.
+ * In addition to QMimeData::setUrls() and QMimeData::urls(), these functions allow to:
+ *
+ * - Store two sets of URLs, the KDE-specific URLs and the equivalent local-file URLs
+ * for compatibility with non-KDE applications
+ * - Store KIO metadata, such as the HTTP referrer for a given URL (some websites
+ * require it for downloading e.g. an image)
+ *
+ * @since 5.0
+ */
+namespace KUrlMimeData
+{
+typedef QMap<QString, QString> MetaDataMap;
+
+/**
+ * Adds URLs and KIO metadata into the given QMimeData.
+ *
+ * WARNING: do not call this method multiple times on the same mimedata object,
+ * you can add urls only once. But you can add other things, e.g. images, XML...
+ *
+ * @param mimeData the QMimeData instance used to drag or copy this URL
+ */
+KCOREADDONS_EXPORT void setUrls(const QList<QUrl> &urls, const QList<QUrl> &mostLocalUrls, QMimeData *mimeData);
+/**
+ * @param metaData KIO metadata shipped in the mime data, which is used for instance to
+ * set a correct HTTP referrer (some websites require it for downloading e.g. an image)
+ */
+KCOREADDONS_EXPORT void setMetaData(const MetaDataMap &metaData, QMimeData *mimeData);
+
+/**
+ * Return the list of mimeTypes that can be decoded by urlsFromMimeData
+ */
+KCOREADDONS_EXPORT QStringList mimeDataTypes();
+
+/**
+ * Flags to be used in urlsFromMimeData.
+ */
+enum DecodeOptions {
+ /**
+ * When the mimedata contains both KDE-style URLs (eg: desktop:/foo) and
+ * the "most local" version of the URLs (eg: file:///home/dfaure/Desktop/foo),
+ * decode it as local urls. Useful in paste/drop operations that end up calling KIO,
+ * so that urls from other users work as well.
+ */
+ PreferLocalUrls,
+ /**
+ * When the mimedata contains both KDE-style URLs (eg: desktop:/foo) and
+ * the "most local" version of the URLs (eg: file:///home/dfaure/Desktop/foo),
+ * decode it as the KDE-style URL. Useful in DnD code e.g. when moving icons,
+ * and the kde-style url is used as identifier for the icons.
+ */
+ PreferKdeUrls,
+};
+
+/**
+ * Extract a list of urls from the contents of @p mimeData.
+ *
+ * Compared to QMimeData::urls(), this method has support for retrieving KDE-specific URLs
+ * when urls() would retrieve "most local URLs" instead.
+ *
+ * Decoding will fail if @p mimeData does not contain any URLs, or if at
+ * least one extracted URL is not valid.
+ *
+ * @param mimeData the mime data to extract from; cannot be 0
+ * @param decodeOptions options for decoding
+ * @param metaData optional pointer to a map which will hold the metadata after this call
+ * @return the list of urls
+ */
+KCOREADDONS_EXPORT QList<QUrl> urlsFromMimeData(const QMimeData *mimeData, DecodeOptions decodeOptions = PreferKdeUrls, MetaDataMap *metaData = nullptr);
+
+}
+
+#endif /* KURLMIMEDATA_H */
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2006 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kcompositejob.h"
+#include "kcompositejob_p.h"
+
+KCompositeJobPrivate::KCompositeJobPrivate()
+{
+}
+
+KCompositeJobPrivate::~KCompositeJobPrivate()
+{
+}
+
+KCompositeJob::KCompositeJob(QObject *parent)
+ : KJob(*new KCompositeJobPrivate, parent)
+{
+}
+
+KCompositeJob::KCompositeJob(KCompositeJobPrivate &dd, QObject *parent)
+ : KJob(dd, parent)
+{
+}
+
+KCompositeJob::~KCompositeJob()
+{
+}
+
+bool KCompositeJob::addSubjob(KJob *job)
+{
+ Q_D(KCompositeJob);
+ if (job == nullptr || d->subjobs.contains(job)) {
+ return false;
+ }
+
+ job->setParent(this);
+ d->subjobs.append(job);
+ connect(job, &KJob::result, this, &KCompositeJob::slotResult);
+
+ // Forward information from that subjob.
+ connect(job, &KJob::infoMessage, this, &KCompositeJob::slotInfoMessage);
+
+ return true;
+}
+
+bool KCompositeJob::removeSubjob(KJob *job)
+{
+ Q_D(KCompositeJob);
+ // remove only Subjobs that are on the list
+ if (d->subjobs.removeAll(job) > 0) {
+ job->setParent(nullptr);
+ disconnect(job, &KJob::result, this, &KCompositeJob::slotResult);
+ disconnect(job, &KJob::infoMessage, this, &KCompositeJob::slotInfoMessage);
+ return true;
+ }
+ return false;
+}
+
+bool KCompositeJob::hasSubjobs() const
+{
+ return !d_func()->subjobs.isEmpty();
+}
+
+const QList<KJob *> &KCompositeJob::subjobs() const
+{
+ return d_func()->subjobs;
+}
+
+void KCompositeJob::clearSubjobs()
+{
+ Q_D(KCompositeJob);
+ for (KJob *job : qAsConst(d->subjobs)) {
+ job->setParent(nullptr);
+ disconnect(job, &KJob::result, this, &KCompositeJob::slotResult);
+ disconnect(job, &KJob::infoMessage, this, &KCompositeJob::slotInfoMessage);
+ }
+ d->subjobs.clear();
+}
+
+void KCompositeJob::slotResult(KJob *job)
+{
+ // Did job have an error ?
+ if (job->error() && !error()) {
+ // Store it in the parent only if first error
+ setError(job->error());
+ setErrorText(job->errorText());
+ // Finish this job
+ emitResult();
+ }
+ // After a subjob is done, we might want to start another one.
+ // Therefore do not emitResult
+ removeSubjob(job);
+}
+
+void KCompositeJob::slotInfoMessage(KJob *job, const QString &plain, const QString &rich)
+{
+ Q_EMIT infoMessage(job, plain, rich);
+}
+
+#include "moc_kcompositejob.cpp"
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2006 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KCOMPOSITEJOB_H
+#define KCOMPOSITEJOB_H
+
+#include <kcoreaddons_export.h>
+#include <kjob.h>
+
+#include <QList>
+
+class KCompositeJobPrivate;
+/**
+ * @class KCompositeJob kcompositejob.h KCompositeJob
+ *
+ * The base class for all jobs able to be composed of one
+ * or more subjobs.
+ */
+class KCOREADDONS_EXPORT KCompositeJob : public KJob
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Creates a new KCompositeJob object.
+ *
+ * @param parent the parent QObject
+ */
+ explicit KCompositeJob(QObject *parent = nullptr);
+
+ /**
+ * Destroys a KCompositeJob object.
+ */
+ ~KCompositeJob() override;
+
+protected:
+ /**
+ * Add a job that has to be finished before a result
+ * is emitted. This has obviously to be called before
+ * the result has been emitted by the job.
+ *
+ * Note that the composite job takes ownership of @p job
+ *
+ * @param job the subjob to add
+ * @return true if the job has been added correctly, false otherwise
+ */
+ virtual bool addSubjob(KJob *job);
+
+ /**
+ * Mark a sub job as being done.
+ *
+ * The ownership of @p job is passed on to the caller.
+ *
+ * @param job the subjob to remove
+ * @return true if the job has been removed correctly, false otherwise
+ */
+ virtual bool removeSubjob(KJob *job);
+
+ /**
+ * Checks if this job has subjobs running.
+ *
+ * @return true if we still have subjobs running, false otherwise
+ */
+ bool hasSubjobs() const;
+
+ /**
+ * Retrieves the list of the subjobs.
+ *
+ * @return the full list of sub jobs
+ */
+ const QList<KJob *> &subjobs() const;
+
+ /**
+ * Clears the list of subjobs.
+ *
+ * Note that this will *not* delete the subjobs.
+ * Ownership of the subjobs is passed on to the caller.
+ */
+ void clearSubjobs();
+
+protected Q_SLOTS:
+ /**
+ * Called whenever a subjob finishes.
+ * Default implementation checks for errors and propagates
+ * to parent job, and in all cases it calls removeSubjob.
+ *
+ * @param job the subjob
+ */
+ virtual void slotResult(KJob *job);
+
+ /**
+ * Forward signal from subjob.
+ *
+ * @param job the subjob
+ * @param plain the info message in plain text version
+ * @param rich the info message in rich text version
+ * @see infoMessage()
+ */
+ virtual void slotInfoMessage(KJob *job, const QString &plain, const QString &rich);
+
+protected:
+ KCompositeJob(KCompositeJobPrivate &dd, QObject *parent);
+
+private:
+ Q_DECLARE_PRIVATE(KCompositeJob)
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2006 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KCOMPOSITEJOB_P_H
+#define KCOMPOSITEJOB_P_H
+
+#include "kcompositejob.h"
+
+#include "kjob_p.h"
+
+// This is a private class, but it's exported for
+// KIO::Job's usage. Other Job classes in kdelibs may
+// use it too.
+class KCOREADDONS_EXPORT KCompositeJobPrivate : public KJobPrivate
+{
+public:
+ KCompositeJobPrivate();
+ ~KCompositeJobPrivate();
+
+ QList<KJob *> subjobs;
+
+ Q_DECLARE_PUBLIC(KCompositeJob)
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2000 Stephan Kulow <coolo@kde.org>
+ SPDX-FileCopyrightText: 2000 David Faure <faure@kde.org>
+ SPDX-FileCopyrightText: 2006 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kjob.h"
+#include "kjob_p.h"
+
+#include "kjobuidelegate.h"
+
+#include <QEventLoop>
+#include <QTimer>
+
+KJobPrivate::KJobPrivate()
+{
+}
+
+KJobPrivate::~KJobPrivate()
+{
+}
+
+KJob::KJob(QObject *parent)
+ : QObject(parent)
+ , d_ptr(new KJobPrivate)
+{
+ d_ptr->q_ptr = this;
+}
+
+KJob::KJob(KJobPrivate &dd, QObject *parent)
+ : QObject(parent)
+ , d_ptr(&dd)
+{
+ d_ptr->q_ptr = this;
+}
+
+KJob::~KJob()
+{
+ if (!d_ptr->isFinished) {
+ d_ptr->isFinished = true;
+ Q_EMIT finished(this, QPrivateSignal());
+ }
+
+ delete d_ptr->speedTimer;
+ delete d_ptr->uiDelegate;
+}
+
+void KJob::setUiDelegate(KJobUiDelegate *delegate)
+{
+ Q_D(KJob);
+ if (!delegate) {
+ delete d->uiDelegate;
+ d->uiDelegate = nullptr;
+ return;
+ }
+
+ if (delegate->setJob(this)) {
+ delete d->uiDelegate;
+ d->uiDelegate = delegate;
+ d->uiDelegate->connectJob(this);
+ }
+}
+
+KJobUiDelegate *KJob::uiDelegate() const
+{
+ return d_func()->uiDelegate;
+}
+
+KJob::Capabilities KJob::capabilities() const
+{
+ return d_func()->capabilities;
+}
+
+bool KJob::isSuspended() const
+{
+ return d_func()->suspended;
+}
+
+void KJob::finishJob(bool emitResult)
+{
+ Q_D(KJob);
+ Q_ASSERT(!d->isFinished);
+ d->isFinished = true;
+
+ if (d->eventLoop) {
+ d->eventLoop->quit();
+ }
+
+ // If we are displaying a progress dialog, remove it first.
+ Q_EMIT finished(this, QPrivateSignal());
+
+ if (emitResult) {
+ Q_EMIT result(this, QPrivateSignal());
+ }
+
+ if (isAutoDelete()) {
+ deleteLater();
+ }
+}
+
+bool KJob::kill(KillVerbosity verbosity)
+{
+ Q_D(KJob);
+ if (d->isFinished) {
+ return true;
+ }
+
+ if (doKill()) {
+ // A subclass can (but should not) call emitResult() or kill()
+ // from doKill() and thus set isFinished to true.
+ if (!d->isFinished) {
+ setError(KilledJobError);
+ finishJob(verbosity != Quietly);
+ }
+ return true;
+ } else {
+ return false;
+ }
+}
+
+bool KJob::suspend()
+{
+ Q_D(KJob);
+ if (!d->suspended) {
+ if (doSuspend()) {
+ d->suspended = true;
+ Q_EMIT suspended(this, QPrivateSignal());
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool KJob::resume()
+{
+ Q_D(KJob);
+ if (d->suspended) {
+ if (doResume()) {
+ d->suspended = false;
+ Q_EMIT resumed(this, QPrivateSignal());
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool KJob::doKill()
+{
+ return false;
+}
+
+bool KJob::doSuspend()
+{
+ return false;
+}
+
+bool KJob::doResume()
+{
+ return false;
+}
+
+void KJob::setCapabilities(KJob::Capabilities capabilities)
+{
+ Q_D(KJob);
+ d->capabilities = capabilities;
+}
+
+bool KJob::exec()
+{
+ Q_D(KJob);
+ // Usually this job would delete itself, via deleteLater() just after
+ // emitting result() (unless configured otherwise). Since we use an event
+ // loop below, that event loop will process the deletion event and we'll
+ // have been deleted when exec() returns. This crashes, so temporarily
+ // suspend autodeletion and manually do it afterwards.
+ const bool wasAutoDelete = isAutoDelete();
+ setAutoDelete(false);
+
+ Q_ASSERT(!d->eventLoop);
+
+ QEventLoop loop(this);
+ d->eventLoop = &loop;
+
+ start();
+ if (!d->isFinished) {
+ d->eventLoop->exec(QEventLoop::ExcludeUserInputEvents);
+ }
+ d->eventLoop = nullptr;
+
+ if (wasAutoDelete) {
+ deleteLater();
+ }
+ return (d->error == NoError);
+}
+
+int KJob::error() const
+{
+ return d_func()->error;
+}
+
+QString KJob::errorText() const
+{
+ return d_func()->errorText;
+}
+
+QString KJob::errorString() const
+{
+ return d_func()->errorText;
+}
+
+qulonglong KJob::processedAmount(Unit unit) const
+{
+ return d_func()->processedAmount[unit];
+}
+
+qulonglong KJob::totalAmount(Unit unit) const
+{
+ return d_func()->totalAmount[unit];
+}
+
+unsigned long KJob::percent() const
+{
+ return d_func()->percentage;
+}
+
+bool KJob::isFinished() const
+{
+ return d_func()->isFinished;
+}
+
+void KJob::setError(int errorCode)
+{
+ Q_D(KJob);
+ d->error = errorCode;
+}
+
+void KJob::setErrorText(const QString &errorText)
+{
+ Q_D(KJob);
+ d->errorText = errorText;
+}
+
+void KJob::setProcessedAmount(Unit unit, qulonglong amount)
+{
+ Q_D(KJob);
+ bool should_emit = (d->processedAmount[unit] != amount);
+
+ d->processedAmount[unit] = amount;
+
+ if (should_emit) {
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 80)
+ Q_EMIT processedAmount(this, unit, amount);
+#endif
+ Q_EMIT processedAmountChanged(this, unit, amount, QPrivateSignal{});
+ if (unit == d->progressUnit) {
+ Q_EMIT processedSize(this, amount);
+ emitPercent(d->processedAmount[unit], d->totalAmount[unit]);
+ }
+ }
+}
+
+void KJob::setTotalAmount(Unit unit, qulonglong amount)
+{
+ Q_D(KJob);
+ bool should_emit = (d->totalAmount[unit] != amount);
+
+ d->totalAmount[unit] = amount;
+
+ if (should_emit) {
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 80)
+ Q_EMIT totalAmount(this, unit, amount);
+#endif
+ Q_EMIT totalAmountChanged(this, unit, amount, QPrivateSignal{});
+ if (unit == d->progressUnit) {
+ Q_EMIT totalSize(this, amount);
+ emitPercent(d->processedAmount[unit], d->totalAmount[unit]);
+ }
+ }
+}
+
+void KJob::setProgressUnit(Unit unit)
+{
+ Q_D(KJob);
+ d->progressUnit = unit;
+}
+
+void KJob::setPercent(unsigned long percentage)
+{
+ Q_D(KJob);
+ if (d->percentage != percentage) {
+ d->percentage = percentage;
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 80)
+ Q_EMIT percent(this, percentage);
+#endif
+ Q_EMIT percentChanged(this, percentage, QPrivateSignal{});
+ }
+}
+
+void KJob::emitResult()
+{
+ if (!d_func()->isFinished) {
+ finishJob(true);
+ }
+}
+
+void KJob::emitPercent(qulonglong processedAmount, qulonglong totalAmount)
+{
+ Q_D(KJob);
+ // calculate percents
+ if (totalAmount) {
+ unsigned long oldPercentage = d->percentage;
+ d->percentage = 100.0 * processedAmount / totalAmount;
+ if (d->percentage != oldPercentage) {
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 80)
+ Q_EMIT percent(this, d->percentage);
+#endif
+ Q_EMIT percentChanged(this, d->percentage, QPrivateSignal{});
+ }
+ }
+}
+
+void KJob::emitSpeed(unsigned long value)
+{
+ Q_D(KJob);
+ if (!d->speedTimer) {
+ d->speedTimer = new QTimer(this);
+ connect(d->speedTimer, &QTimer::timeout, this, [d]() {
+ d->speedTimeout();
+ });
+ }
+
+ Q_EMIT speed(this, value);
+ d->speedTimer->start(5000); // 5 seconds interval should be enough
+}
+
+void KJobPrivate::speedTimeout()
+{
+ Q_Q(KJob);
+ // send 0 and stop the timer
+ // timer will be restarted only when we receive another speed event
+ Q_EMIT q->speed(q, 0);
+ speedTimer->stop();
+}
+
+bool KJob::isAutoDelete() const
+{
+ Q_D(const KJob);
+ return d->isAutoDelete;
+}
+
+void KJob::setAutoDelete(bool autodelete)
+{
+ Q_D(KJob);
+ d->isAutoDelete = autodelete;
+}
+
+#include "moc_kjob.cpp"
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2000 Stephan Kulow <coolo@kde.org>
+ SPDX-FileCopyrightText: 2000 David Faure <faure@kde.org>
+ SPDX-FileCopyrightText: 2006 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KJOB_H
+#define KJOB_H
+
+#include <QObject>
+#include <QPair>
+#include <kcoreaddons_export.h>
+#include <memory>
+
+class KJobUiDelegate;
+
+class KJobPrivate;
+/**
+ * @class KJob kjob.h KJob
+ *
+ * The base class for all jobs.
+ * For all jobs created in an application, the code looks like
+ *
+ * \code
+ * void SomeClass::methodWithAsynchronousJobCall()
+ * {
+ * KJob* job = someoperation(some parameters);
+ * connect(job, &KJob::result,
+ * this, &SomeClass::handleResult);
+ * job->start();
+ * }
+ * \endcode
+ * (other connects, specific to the job)
+ *
+ * And handleResult is usually at least:
+ *
+ * \code
+ * void SomeClass::handleResult(KJob *job)
+ * {
+ * if (job->error()) {
+ * doSomething();
+ * }
+ * }
+ * \endcode
+ *
+ * With the synchronous interface the code looks like
+ *
+ * \code
+ * void SomeClass::methodWithSynchronousJobCall()
+ * {
+ * KJob *job = someoperation( some parameters );
+ * if (!job->exec()) {
+ * // An error occurred
+ * } else {
+ * // Do something
+ * }
+ * }
+ * \endcode
+ *
+ * Subclasses must implement start(), which should trigger
+ * the execution of the job (although the work should be
+ * done asynchronously). errorString() should also be
+ * reimplemented by any subclasses that introduce new
+ * error codes.
+ *
+ * @note KJob and its subclasses are meant to be used
+ * in a fire-and-forget way. Jobs will delete themselves
+ * when they finish using deleteLater() (although this
+ * behaviour can be changed), so a job instance will
+ * disappear after the next event loop run.
+ */
+class KCOREADDONS_EXPORT KJob : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int error READ error NOTIFY result)
+ Q_PROPERTY(QString errorText READ errorText NOTIFY result)
+ Q_PROPERTY(QString errorString READ errorString NOTIFY result)
+ Q_PROPERTY(ulong percent READ percent NOTIFY percent) // KF6 TODO: make "int", is enough
+ Q_PROPERTY(Capabilities capabilities READ capabilities CONSTANT)
+
+public:
+ /**
+ * Describes the unit used in the methods that handle reporting the job progress info.
+ * @see totalAmount
+ */
+ enum Unit {
+ Bytes, ///< Directory and file sizes in bytes
+ Files, ///< The number of files handled by the job
+ Directories, ///< The number of directories handled by the job
+ Items, ///< The number of items (e.g. both directories and files) handled by the job
+ ///< @since 5.72
+ };
+ Q_ENUM(Unit)
+
+ /**
+ * @see Capabilities
+ */
+ enum Capability {
+ NoCapabilities = 0x0000, ///< None of the capabilities exist
+ Killable = 0x0001, ///< The job can be killed
+ Suspendable = 0x0002, ///< The job can be suspended
+ };
+ Q_ENUM(Capability)
+
+ /**
+ * Stores a combination of #Capability values.
+ */
+ Q_DECLARE_FLAGS(Capabilities, Capability)
+ Q_FLAG(Capabilities)
+
+ /**
+ * Creates a new KJob object.
+ *
+ * @param parent the parent QObject
+ */
+ explicit KJob(QObject *parent = nullptr);
+
+ /**
+ * Destroys a KJob object.
+ */
+ ~KJob() override;
+
+ /**
+ * Attach a UI delegate to this job.
+ *
+ * If the job had another UI delegate, it's automatically deleted. Once
+ * attached to the job, the UI delegate will be deleted with the job.
+ *
+ * @param delegate the new UI delegate to use
+ * @see KJobUiDelegate
+ */
+ void setUiDelegate(KJobUiDelegate *delegate);
+
+ /**
+ * Retrieves the delegate attached to this job.
+ *
+ * @return the delegate attached to this job, or @c nullptr if there's no such delegate
+ */
+ KJobUiDelegate *uiDelegate() const;
+
+ /**
+ * Returns the capabilities of this job.
+ *
+ * @return the capabilities that this job supports
+ * @see setCapabilities()
+ */
+ Capabilities capabilities() const;
+
+ /**
+ * Returns if the job was suspended with the suspend() call.
+ *
+ * @return if the job was suspended
+ * @see suspend() resume()
+ */
+ bool isSuspended() const;
+
+ /**
+ * Starts the job asynchronously.
+ *
+ * When the job is finished, result() is emitted.
+ *
+ * Warning: Never implement any synchronous workload in this method. This method
+ * should just trigger the job startup, not do any work itself. It is expected to
+ * be non-blocking.
+ *
+ * This is the method all subclasses need to implement.
+ * It should setup and trigger the workload of the job. It should not do any
+ * work itself. This includes all signals and terminating the job, e.g. by
+ * emitResult(). The workload, which could be another method of the
+ * subclass, is to be triggered using the event loop, e.g. by code like:
+ * \code
+ * void ExampleJob::start()
+ * {
+ * QTimer::singleShot(0, this, &ExampleJob::doWork);
+ * }
+ * \endcode
+ */
+ Q_SCRIPTABLE virtual void start() = 0;
+
+ enum KillVerbosity {
+ Quietly,
+ EmitResult,
+ };
+ Q_ENUM(KillVerbosity)
+
+public Q_SLOTS:
+ /**
+ * Aborts this job.
+ *
+ * This kills and deletes the job.
+ *
+ * @param verbosity if equals to EmitResult, Job will emit signal result
+ * and ask uiserver to close the progress window.
+ * @p verbosity is set to EmitResult for subjobs. Whether applications
+ * should call with Quietly or EmitResult depends on whether they rely
+ * on result being emitted or not. Please notice that if @p verbosity is
+ * set to Quietly, signal result will NOT be emitted.
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ // TODO KF6 slot arguments need to be fully-qualified, KJob::KillVerbosity
+ bool kill(KillVerbosity verbosity = Quietly);
+
+ /**
+ * Suspends this job.
+ * The job should be kept in a state in which it is possible to resume it.
+ *
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ bool suspend();
+
+ /**
+ * Resumes this job.
+ *
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ bool resume();
+
+protected:
+ /**
+ * Aborts this job quietly.
+ *
+ * This simply kills the job, no error reporting or job deletion should be involved.
+ *
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ virtual bool doKill();
+
+ /**
+ * Suspends this job.
+ *
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ virtual bool doSuspend();
+
+ /**
+ * Resumes this job.
+ *
+ * @return true if the operation is supported and succeeded, false otherwise
+ */
+ virtual bool doResume();
+
+ /**
+ * Sets the capabilities for this job.
+ *
+ * @param capabilities are the capabilities supported by this job
+ * @see capabilities()
+ */
+ void setCapabilities(Capabilities capabilities);
+
+public:
+ /**
+ * Executes the job synchronously.
+ *
+ * This will start a nested QEventLoop internally. Nested event loop can be dangerous and
+ * can have unintended side effects, you should avoid calling exec() whenever you can and use the
+ * asynchronous interface of KJob instead.
+ *
+ * Should you indeed call this method, you need to make sure that all callers are reentrant,
+ * so that events delivered by the inner event loop don't cause non-reentrant functions to be
+ * called, which usually wreaks havoc.
+ *
+ * Note that the event loop started by this method does not process user input events, which means
+ * your user interface will effectively be blocked. Other events like paint or network events are
+ * still being processed. The advantage of not processing user input events is that the chance of
+ * accidental reentrance is greatly reduced. Still you should avoid calling this function.
+ *
+ * @return true if the job has been executed without error, false otherwise
+ */
+ bool exec();
+
+ enum {
+ /*** Indicates there is no error */
+ NoError = 0,
+ /*** Indicates the job was killed */
+ KilledJobError = 1,
+ /*** Subclasses should define error codes starting at this value */
+ UserDefinedError = 100,
+ };
+
+ /**
+ * Returns the error code, if there has been an error.
+ *
+ * Only call this method from the slot connected to result().
+ *
+ * @return the error code for this job, 0 if no error.
+ */
+ int error() const;
+
+ /**
+ * Returns the error text if there has been an error.
+ *
+ * Only call if error is not 0.
+ *
+ * This is usually some extra data associated with the error,
+ * such as a URL. Use errorString() to get a human-readable,
+ * translated message.
+ *
+ * @return a string to help understand the error
+ */
+ QString errorText() const;
+
+ /**
+ * A human-readable error message.
+ *
+ * This provides a translated, human-readable description of the
+ * error. Only call if error is not 0.
+ *
+ * Subclasses should implement this to create a translated
+ * error message from the error code and error text.
+ * For example:
+ * \code
+ * if (error() == ReadFailed) {
+ * i18n("Could not read \"%1\"", errorText());
+ * }
+ * \endcode
+ *
+ * @return a translated error message, providing error() is 0
+ */
+ virtual QString errorString() const;
+
+ /**
+ * Returns the processed amount of a given unit for this job.
+ *
+ * @param unit the unit of the requested amount
+ * @return the processed size
+ */
+ Q_SCRIPTABLE qulonglong processedAmount(Unit unit) const;
+
+ /**
+ * Returns the total amount of a given unit for this job.
+ *
+ * @param unit the unit of the requested amount
+ * @return the total size
+ */
+ Q_SCRIPTABLE qulonglong totalAmount(Unit unit) const;
+
+ /**
+ * Returns the overall progress of this job.
+ *
+ * @return the overall progress of this job
+ */
+ unsigned long percent() const;
+
+ /**
+ * set the auto-delete property of the job. If @p autodelete is
+ * set to false the job will not delete itself once it is finished.
+ *
+ * The default for any KJob is to automatically delete itself.
+ *
+ * @param autodelete set to false to disable automatic deletion
+ * of the job.
+ */
+ void setAutoDelete(bool autodelete);
+
+ /**
+ * Returns whether this job automatically deletes itself once
+ * the job is finished.
+ *
+ * @return whether the job is deleted automatically after
+ * finishing.
+ */
+ bool isAutoDelete() const;
+
+Q_SIGNALS:
+ /**
+ * Emitted when the job is finished, in any case. It is used to notify
+ * observers that the job is terminated and that progress can be hidden.
+ *
+ * @since 5.75: this signal is guaranteed to be emitted exactly once.
+ *
+ * This is a private signal, it can't be emitted directly by subclasses of
+ * KJob, use emitResult() instead.
+ *
+ * In general, to be notified of a job's completion, client code should connect to result()
+ * rather than finished(), so that kill(Quietly) is indeed quiet.
+ * However if you store a list of jobs and they might get killed silently,
+ * then you must connect to this instead of result(), to avoid dangling pointers in your list.
+ *
+ * @param job the job that emitted this signal
+ * @internal
+ *
+ * @see result
+ */
+ void finished(KJob *job
+#if !defined(K_DOXYGEN)
+ ,
+ QPrivateSignal
+#endif
+ );
+
+ /**
+ * Emitted when the job is suspended.
+ *
+ * This is a private signal, it can't be emitted directly by subclasses of
+ * KJob.
+ *
+ * @param job the job that emitted this signal
+ */
+ void suspended(KJob *job
+#if !defined(K_DOXYGEN)
+ ,
+ QPrivateSignal
+#endif
+ );
+
+ /**
+ * Emitted when the job is resumed.
+ *
+ * This is a private signal, it can't be emitted directly by subclasses of
+ * KJob.
+ *
+ * @param job the job that emitted this signal
+ */
+ void resumed(KJob *job
+#if !defined(K_DOXYGEN)
+ ,
+ QPrivateSignal
+#endif
+ );
+
+ /**
+ * Emitted when the job is finished (except when killed with KJob::Quietly).
+ *
+ * @since 5.75: this signal is guaranteed to be emitted at most once.
+ *
+ * Use error to know if the job was finished with error.
+ *
+ * This is a private signal, it can't be emitted directly by subclasses of
+ * KJob, use emitResult() instead.
+ *
+ * Please connect to this signal instead of finished.
+ *
+ * @param job the job that emitted this signal
+ *
+ * @see kill
+ */
+ void result(KJob *job
+#if !defined(K_DOXYGEN)
+ ,
+ QPrivateSignal
+#endif
+ );
+
+ /**
+ * Emitted to display general description of this job. A description has
+ * a title and two optional fields which can be used to complete the
+ * description.
+ *
+ * Examples of titles are "Copying", "Creating resource", etc.
+ * The fields of the description can be "Source" with an URL, and,
+ * "Destination" with an URL for a "Copying" description.
+ * @param job the job that emitted this signal
+ * @param title the general description of the job
+ * @param field1 first field (localized name and value)
+ * @param field2 second field (localized name and value)
+ */
+ void description(KJob *job,
+ const QString &title,
+ const QPair<QString, QString> &field1 = QPair<QString, QString>(),
+ const QPair<QString, QString> &field2 = QPair<QString, QString>());
+ /**
+ * Emitted to display state information about this job.
+ * Examples of message are "Resolving host", "Connecting to host...", etc.
+ *
+ * @param job the job that emitted this signal
+ * @param plain the info message
+ * @param rich the rich text version of the message, or QString() is none is available -- do not use, it's ignored
+ */
+ void infoMessage(KJob *job, const QString &plain, const QString &rich = QString()); // KF6 TODO remove the 'rich' argument
+
+ /**
+ * Emitted to display a warning about this job.
+ *
+ * @param job the job that emitted this signal
+ * @param plain the warning message
+ * @param rich the rich text version of the message, or QString() is none is available
+ */
+ void warning(KJob *job, const QString &plain, const QString &rich = QString());
+
+Q_SIGNALS:
+ // These signals must be connected from KIO::KCoreDirLister (among others),
+ // therefore they must be public.
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ /**
+ * Emitted when we know the amount the job will have to process. The unit of this
+ * amount is sent too. It can be emitted several times if the job manages several
+ * different units.
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use setTotalAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param unit the unit of the total amount
+ * @param amount the total amount
+ *
+ * @deprecated since 5.80, use the KJob::totalAmountChanged(KJob *, KJob::Unit, qulonglong) signal instead
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 80, "Use KJob::totalAmountChanged(KJob *, KJob::Unit, qulonglong) signal")
+ void totalAmount(KJob *job, KJob::Unit unit, qulonglong amount); // clazy:exclude=overloaded-signal
+#endif
+
+ /**
+ * Emitted when we know the amount the job will have to process. The unit of this
+ * amount is sent too. It can be emitted several times if the job manages several
+ * different units.
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use setTotalAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param unit the unit of the total amount
+ * @param amount the total amount
+ *
+ * @since 5.80
+ */
+ void totalAmountChanged(KJob *job, KJob::Unit unit, qulonglong amount
+ #if !defined(K_DOXYGEN)
+ , QPrivateSignal
+ #endif
+ );
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ /**
+ * Regularly emitted to show the progress of this job by giving the current amount.
+ * The unit of this amount is sent too. It can be emitted several times if the job
+ * manages several different units.
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use setProcessedAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param unit the unit of the processed amount
+ * @param amount the processed amount
+ *
+ * @deprecated since 5.80, use the KJob::processedAmountChanged(KJob *, KJob::Unit, qulonglong)
+ * signal instead
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 80, "Use KJob::processedAmountChanged(KJob *, KJob::Unit, qulonglong) signal")
+ void processedAmount(KJob *job, KJob::Unit unit, qulonglong amount); // clazy:exclude=overloaded-signal
+#endif
+
+ /**
+ * Regularly emitted to show the progress of this job by giving the current amount.
+ * The unit of this amount is sent too. It can be emitted several times if the job
+ * manages several different units.
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use setProcessedAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param unit the unit of the processed amount
+ * @param amount the processed amount
+ *
+ * @since 5.80
+ */
+ void processedAmountChanged(KJob *job, KJob::Unit unit, qulonglong amount
+ #if !defined(K_DOXYGEN)
+ , QPrivateSignal
+ #endif
+ );
+
+ /**
+ * Emitted when we know the size of this job (data size in bytes for transfers,
+ * number of entries for listings, etc).
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use setTotalAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param size the total size
+ */
+ void totalSize(KJob *job, qulonglong size);
+
+ /**
+ * Regularly emitted to show the progress of this job
+ * (current data size in bytes for transfers, entries listed, etc.).
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use setProcessedAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param size the processed size
+ */
+ void processedSize(KJob *job, qulonglong size);
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 80)
+ /**
+ * Progress signal showing the overall progress of the job
+ * This is valid for any kind of job, and allows using a
+ * a progress bar very easily. (see KProgressBar).
+ * Note that this signal is not emitted for finished jobs.
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use emitPercent(), setPercent() setTotalAmount() or
+ * setProcessedAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param percent the percentage
+ *
+ * @deprecated since 5.80, use the KJob::percentChanged(KJob *, unsigned long)
+ * signal instead.
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 80, "Use KJob::percentChanged(KJob *, unsigned long) signal")
+ void percent(KJob *job, unsigned long percent); // clazy:exclude=overloaded-signal
+#endif
+
+ /**
+ * Progress signal showing the overall progress of the job. This is
+ * valid for any kind of job, and allows using a progress bar very
+ * easily. (see KProgressBar).
+ *
+ * Note that this signal is not emitted for finished jobs.
+ *
+ * @note This is a private signal, it shouldn't be emitted directly
+ * by subclasses of KJob, use emitPercent(), setPercent() setTotalAmount()
+ * or setProcessedAmount() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param percent the percentage
+ *
+ * @since 5.80
+ */
+ void percentChanged(KJob *job, unsigned long percent
+ #if !defined(K_DOXYGEN)
+ , QPrivateSignal
+ #endif
+ );
+
+ /**
+ * Emitted to display information about the speed of this job.
+ *
+ * @note This is a private signal, it shouldn't be emitted directly by subclasses of
+ * KJob, use emitSpeed() instead.
+ *
+ * @param job the job that emitted this signal
+ * @param speed the speed in bytes/s
+ */
+ void speed(KJob *job, unsigned long speed);
+
+protected:
+ /**
+ * Returns if the job has been finished and has emitted the finished() signal.
+ *
+ * @return if the job has been finished
+ * @see finished()
+ * @since 5.75
+ */
+ bool isFinished() const;
+
+ /**
+ * Sets the error code.
+ *
+ * It should be called when an error
+ * is encountered in the job, just before calling emitResult().
+ *
+ * You should define an (anonymous) enum of error codes,
+ * with values starting at KJob::UserDefinedError, and use
+ * those. For example,
+ * @code
+ * enum {
+ * InvalidFoo = UserDefinedError,
+ * BarNotFound,
+ * };
+ * @endcode
+ *
+ * @param errorCode the error code
+ * @see emitResult()
+ */
+ void setError(int errorCode);
+
+ /**
+ * Sets the error text.
+ *
+ * It should be called when an error
+ * is encountered in the job, just before calling emitResult().
+ *
+ * Provides extra information about the error that cannot be
+ * determined directly from the error code. For example, a
+ * URL or filename. This string is not normally translatable.
+ *
+ * @param errorText the error text
+ * @see emitResult(), errorString(), setError()
+ */
+ void setErrorText(const QString &errorText);
+
+ /**
+ * Sets the processed size. The processedAmount() and percent() signals
+ * are emitted if the values changed. The percent() signal is emitted
+ * only for the progress unit.
+ *
+ * @param unit the unit of the new processed amount
+ * @param amount the new processed amount
+ */
+ void setProcessedAmount(Unit unit, qulonglong amount);
+
+ /**
+ * Sets the total size. The totalSize() and percent() signals
+ * are emitted if the values changed. The percent() signal is emitted
+ * only for the progress unit.
+ *
+ * @param unit the unit of the new total amount
+ * @param amount the new total amount
+ */
+ void setTotalAmount(Unit unit, qulonglong amount);
+
+ /**
+ * Sets the unit that will be used internally to calculate
+ * the progress percentage.
+ * The default progress unit is Bytes.
+ * @since 5.76
+ */
+ void setProgressUnit(Unit unit);
+
+ /**
+ * Sets the overall progress of the job. The percent() signal
+ * is emitted if the value changed.
+ *
+ * The job takes care of this if you call setProcessedAmount
+ * in Bytes (or the unit set by setProgressUnit).
+ * This method allows you to set your own progress, as an alternative.
+ *
+ * @param percentage the new overall progress
+ */
+ void setPercent(unsigned long percentage);
+
+ /**
+ * Utility function to emit the result signal, and suicide this job.
+ * It first notifies the observers to hide the progress for this job using
+ * the finished() signal.
+ *
+ * @note Deletes this job using deleteLater().
+ *
+ * @see result()
+ * @see finished()
+ */
+ void emitResult();
+
+ /**
+ * Utility function for inherited jobs.
+ * Emits the percent signal if bigger than previous value,
+ * after calculating it from the parameters.
+ *
+ * @param processedAmount the processed amount
+ * @param totalAmount the total amount
+ * @see percent()
+ */
+ void emitPercent(qulonglong processedAmount, qulonglong totalAmount);
+
+ /**
+ * Utility function for inherited jobs.
+ * Emits the speed signal and starts the timer for removing that info
+ *
+ * @param speed the speed in bytes/s
+ */
+ void emitSpeed(unsigned long speed);
+
+protected:
+ std::unique_ptr<KJobPrivate> const d_ptr;
+ KJob(KJobPrivate &dd, QObject *parent);
+
+private:
+ void finishJob(bool emitResult);
+
+ Q_DECLARE_PRIVATE(KJob)
+};
+
+Q_DECLARE_METATYPE(KJob::Unit)
+Q_DECLARE_OPERATORS_FOR_FLAGS(KJob::Capabilities)
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2000 Stephan Kulow <coolo@kde.org>
+ SPDX-FileCopyrightText: 2000 David Faure <faure@kde.org>
+ SPDX-FileCopyrightText: 2006 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KJOB_P_H
+#define KJOB_P_H
+
+#include "kjob.h"
+#include <QEventLoopLocker>
+#include <QMap>
+
+class KJobUiDelegate;
+class QTimer;
+class QEventLoop;
+
+// This is a private class, but it's exported for
+// KIO::Job's usage. Other Job classes in kdelibs may
+// use it too.
+class KCOREADDONS_EXPORT KJobPrivate
+{
+public:
+ KJobPrivate();
+ virtual ~KJobPrivate();
+
+ KJob *q_ptr = nullptr;
+
+ KJobUiDelegate *uiDelegate = nullptr;
+ QString errorText;
+ int error = KJob::NoError;
+ KJob::Unit progressUnit = KJob::Bytes;
+ QMap<KJob::Unit, qulonglong> processedAmount;
+ QMap<KJob::Unit, qulonglong> totalAmount;
+ unsigned long percentage = 0;
+ QTimer *speedTimer = nullptr;
+ QEventLoop *eventLoop = nullptr;
+ // eventLoopLocker prevents QCoreApplication from exiting when the last
+ // window is closed until the job has finished running
+ QEventLoopLocker eventLoopLocker;
+ KJob::Capabilities capabilities = KJob::NoCapabilities;
+ bool suspended = false;
+ bool isAutoDelete = true;
+
+ void speedTimeout();
+
+ bool isFinished = false;
+
+ Q_DECLARE_PUBLIC(KJob)
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2007 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kjobtrackerinterface.h"
+
+#include "kjob.h"
+
+class KJobTrackerInterfacePrivate
+{
+public:
+ KJobTrackerInterfacePrivate(KJobTrackerInterface *interface)
+ : q(interface)
+ {
+ }
+
+ KJobTrackerInterface *const q;
+};
+
+KJobTrackerInterface::KJobTrackerInterface(QObject *parent)
+ : QObject(parent)
+ , d(new KJobTrackerInterfacePrivate(this))
+{
+ qRegisterMetaType<QPair<QString, QString>>();
+}
+
+KJobTrackerInterface::~KJobTrackerInterface() = default;
+
+void KJobTrackerInterface::registerJob(KJob *job)
+{
+ connect(job, &KJob::finished, this, &KJobTrackerInterface::unregisterJob);
+ connect(job, &KJob::finished, this, &KJobTrackerInterface::finished);
+ connect(job, &KJob::suspended, this, &KJobTrackerInterface::suspended);
+ connect(job, &KJob::resumed, this, &KJobTrackerInterface::resumed);
+
+ connect(job, &KJob::description, this, &KJobTrackerInterface::description);
+ connect(job, &KJob::infoMessage, this, &KJobTrackerInterface::infoMessage);
+ connect(job, &KJob::warning, this, &KJobTrackerInterface::warning);
+ connect(job, &KJob::totalAmountChanged, this, &KJobTrackerInterface::totalAmount);
+ connect(job, &KJob::processedAmountChanged, this, &KJobTrackerInterface::processedAmount);
+ connect(job, &KJob::percentChanged, this, &KJobTrackerInterface::percent);
+ connect(job, &KJob::speed, this, &KJobTrackerInterface::speed);
+}
+
+void KJobTrackerInterface::unregisterJob(KJob *job)
+{
+ job->disconnect(this);
+}
+
+void KJobTrackerInterface::finished(KJob *job)
+{
+ Q_UNUSED(job)
+}
+
+void KJobTrackerInterface::suspended(KJob *job)
+{
+ Q_UNUSED(job)
+}
+
+void KJobTrackerInterface::resumed(KJob *job)
+{
+ Q_UNUSED(job)
+}
+
+void KJobTrackerInterface::description(KJob *job, const QString &title, const QPair<QString, QString> &field1, const QPair<QString, QString> &field2)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(title)
+ Q_UNUSED(field1)
+ Q_UNUSED(field2)
+}
+
+void KJobTrackerInterface::infoMessage(KJob *job, const QString &plain, const QString &rich)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(plain)
+ Q_UNUSED(rich)
+}
+
+void KJobTrackerInterface::warning(KJob *job, const QString &plain, const QString &rich)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(plain)
+ Q_UNUSED(rich)
+}
+
+void KJobTrackerInterface::totalAmount(KJob *job, KJob::Unit unit, qulonglong amount)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(unit)
+ Q_UNUSED(amount)
+}
+
+void KJobTrackerInterface::processedAmount(KJob *job, KJob::Unit unit, qulonglong amount)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(unit)
+ Q_UNUSED(amount)
+}
+
+void KJobTrackerInterface::percent(KJob *job, unsigned long percent)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(percent)
+}
+
+void KJobTrackerInterface::speed(KJob *job, unsigned long value)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(value)
+}
+
+#include "moc_kjobtrackerinterface.cpp"
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2007 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KJOBTRACKERINTERFACE_H
+#define KJOBTRACKERINTERFACE_H
+
+#include <kcoreaddons_export.h>
+#include <kjob.h>
+
+#include <QObject>
+#include <QPair>
+
+#include <memory>
+
+/**
+ * @class KJobTrackerInterface kjobtrackerinterface.h KJobTrackerInterface
+ *
+ * The interface to implement to track the progresses of a job.
+ */
+class KCOREADDONS_EXPORT KJobTrackerInterface : public QObject
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Creates a new KJobTrackerInterface
+ *
+ * @param parent the parent object
+ */
+ explicit KJobTrackerInterface(QObject *parent = nullptr);
+
+ /**
+ * Destroys a KJobTrackerInterface
+ */
+ ~KJobTrackerInterface() override;
+
+public Q_SLOTS:
+ /**
+ * Register a new job in this tracker.
+ * The default implementation connects the following KJob signals
+ * to the respective protected slots of this class:
+ * - finished() (also connected to the unregisterJob() slot)
+ * - suspended()
+ * - resumed()
+ * - description()
+ * - infoMessage()
+ * - totalAmount()
+ * - processedAmount()
+ * - percent()
+ * - speed()
+ *
+ * If you re-implement this method, you may want to call the default
+ * implementation or add at least:
+ *
+ * @code
+ * connect(job, &KJob::finished, this, &MyJobTracker::unregisterJob);
+ * @endcode
+ *
+ * so that you won't have to manually call unregisterJob().
+ *
+ * @param job the job to register
+ * @see unregisterJob()
+ */
+ virtual void registerJob(KJob *job);
+
+ /**
+ * Unregister a job from this tracker.
+ * @note You need to manually call this method only if you re-implemented
+ * registerJob() without connecting KJob::finished to this slot.
+ *
+ * @param job the job to unregister
+ * @see registerJob()
+ */
+ virtual void unregisterJob(KJob *job);
+
+protected Q_SLOTS:
+ /**
+ * Called when a job is finished, in any case. It is used to notify
+ * that the job is terminated and that progress UI (if any) can be hidden.
+ *
+ * @param job the job that emitted this signal
+ */
+ virtual void finished(KJob *job);
+
+ /**
+ * Called when a job is suspended.
+ *
+ * @param job the job that emitted this signal
+ */
+ virtual void suspended(KJob *job);
+
+ /**
+ * Called when a job is resumed.
+ *
+ * @param job the job that emitted this signal
+ */
+ virtual void resumed(KJob *job);
+
+ /**
+ * Called to display general description of a job. A description has
+ * a title and two optional fields which can be used to complete the
+ * description.
+ *
+ * Examples of titles are "Copying", "Creating resource", etc.
+ * The fields of the description can be "Source" with an URL, and,
+ * "Destination" with an URL for a "Copying" description.
+ * @param job the job that emitted this signal
+ * @param title the general description of the job
+ * @param field1 first field (localized name and value)
+ * @param field2 second field (localized name and value)
+ */
+ virtual void description(KJob *job, const QString &title, const QPair<QString, QString> &field1, const QPair<QString, QString> &field2);
+
+ /**
+ * Called to display state information about a job.
+ * Examples of message are "Resolving host", "Connecting to host...", etc.
+ *
+ * @param job the job that emitted this signal
+ * @param plain the info message
+ * @param rich the rich text version of the message, or QString() is none is available
+ */
+ virtual void infoMessage(KJob *job, const QString &plain, const QString &rich);
+
+ /**
+ * Emitted to display a warning about a job.
+ *
+ * @param job the job that emitted this signal
+ * @param plain the warning message
+ * @param rich the rich text version of the message, or QString() is none is available
+ */
+ virtual void warning(KJob *job, const QString &plain, const QString &rich);
+
+ /**
+ * Called when we know the amount a job will have to process. The unit of this
+ * amount is provided too. It can be called several times for a given job if the job
+ * manages several different units.
+ *
+ * @param job the job that emitted this signal
+ * @param unit the unit of the total amount
+ * @param amount the total amount
+ */
+ virtual void totalAmount(KJob *job, KJob::Unit unit, qulonglong amount);
+
+ /**
+ * Regularly called to show the progress of a job by giving the current amount.
+ * The unit of this amount is provided too. It can be called several times for a given
+ * job if the job manages several different units.
+ *
+ * @param job the job that emitted this signal
+ * @param unit the unit of the processed amount
+ * @param amount the processed amount
+ */
+ virtual void processedAmount(KJob *job, KJob::Unit unit, qulonglong amount);
+
+ /**
+ * Called to show the overall progress of the job.
+ * Note that this is not called for finished jobs.
+ *
+ * @param job the job that emitted this signal
+ * @param percent the percentage
+ */
+ virtual void percent(KJob *job, unsigned long percent);
+
+ /**
+ * Called to show the speed of the job.
+ *
+ * @param job the job that emitted this signal
+ * @param value the current speed of the job
+ */
+ virtual void speed(KJob *job, unsigned long value);
+
+private:
+ std::unique_ptr<class KJobTrackerInterfacePrivate> const d;
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2000 Stephan Kulow <coolo@kde.org>
+ SPDX-FileCopyrightText: 2000 David Faure <faure@kde.org>
+ SPDX-FileCopyrightText: 2006 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kjobuidelegate.h"
+#include "kcoreaddons_debug.h"
+#include "kjob.h"
+
+#include <QDebug>
+
+class KJobUiDelegatePrivate
+{
+public:
+ KJobUiDelegatePrivate(KJobUiDelegate *delegate)
+ : q(delegate)
+ , autoErrorHandling(false)
+ , autoWarningHandling(true)
+ {
+ }
+
+ KJobUiDelegate *const q;
+
+ KJob *job = nullptr;
+ bool autoErrorHandling : 1;
+ bool autoWarningHandling : 1;
+
+ void connectJob(KJob *job);
+ void _k_result();
+};
+
+KJobUiDelegate::KJobUiDelegate()
+ : QObject()
+ , d(new KJobUiDelegatePrivate(this))
+{
+}
+
+KJobUiDelegate::KJobUiDelegate(Flags flags)
+ : QObject()
+ , d(new KJobUiDelegatePrivate(this))
+{
+ if (flags & AutoErrorHandlingEnabled) {
+ d->autoErrorHandling = true;
+ }
+ if (flags & AutoWarningHandlingEnabled) {
+ d->autoWarningHandling = true;
+ }
+}
+
+KJobUiDelegate::~KJobUiDelegate() = default;
+
+bool KJobUiDelegate::setJob(KJob *job)
+{
+ if (d->job != nullptr) {
+ qCWarning(KCOREADDONS_DEBUG) << "Trying to attach UI delegate:" << this << "to job" << job //
+ << "but this delegate is already attached to a different job" << d->job;
+ return false;
+ }
+
+ d->job = job;
+ setParent(job);
+
+ return true;
+}
+
+KJob *KJobUiDelegate::job() const
+{
+ return d->job;
+}
+
+void KJobUiDelegate::showErrorMessage()
+{
+ if (d->job->error() != KJob::KilledJobError) {
+ qWarning() << d->job->errorString();
+ }
+}
+
+void KJobUiDelegate::setAutoErrorHandlingEnabled(bool enable)
+{
+ d->autoErrorHandling = enable;
+}
+
+bool KJobUiDelegate::isAutoErrorHandlingEnabled() const
+{
+ return d->autoErrorHandling;
+}
+
+void KJobUiDelegate::setAutoWarningHandlingEnabled(bool enable)
+{
+ d->autoWarningHandling = enable;
+}
+
+bool KJobUiDelegate::isAutoWarningHandlingEnabled() const
+{
+ return d->autoWarningHandling;
+}
+
+void KJobUiDelegate::slotWarning(KJob *job, const QString &plain, const QString &rich)
+{
+ Q_UNUSED(job)
+ Q_UNUSED(plain)
+ Q_UNUSED(rich)
+}
+
+void KJobUiDelegate::connectJob(KJob *job)
+{
+ connect(job, &KJob::result, this, [this]() {
+ d->_k_result();
+ });
+ connect(job, &KJob::warning, this, &KJobUiDelegate::slotWarning);
+}
+
+void KJobUiDelegatePrivate::_k_result()
+{
+ if (job->error() && autoErrorHandling) {
+ q->showErrorMessage();
+ }
+}
+
+#include "moc_kjobuidelegate.cpp"
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2000 Stephan Kulow <coolo@kde.org>
+ SPDX-FileCopyrightText: 2000 David Faure <faure@kde.org>
+ SPDX-FileCopyrightText: 2006 Kevin Ottens <ervin@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KJOBUIDELEGATE_H
+#define KJOBUIDELEGATE_H
+
+#include <QObject>
+#include <kcoreaddons_export.h>
+#include <memory>
+
+class KJob;
+
+/**
+ * @class KJobUiDelegate kjobuidelegate.h KJobUiDelegate
+ *
+ * The base class for all KJob UI delegate.
+ *
+ * A UI delegate is responsible for the events of a
+ * job and provides a UI for them (an error message
+ * box or warning etc.).
+ *
+ * @see KJob
+ */
+class KCOREADDONS_EXPORT KJobUiDelegate : public QObject
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Flags for the constructor, to enable automatic handling of errors and/or warnings
+ * @see Flags
+ * @since 5.70
+ */
+ enum Flag {
+ AutoHandlingDisabled = 0, ///< No automatic handling (default)
+ AutoErrorHandlingEnabled = 1, ///< Equivalent to setAutoErrorHandlingEnabled(true)
+ AutoWarningHandlingEnabled = 2, ///< Equivalent to setAutoWarningHandlingEnabled(true)
+ AutoHandlingEnabled = AutoErrorHandlingEnabled | AutoWarningHandlingEnabled, ///< Enables both error and warning handling
+ };
+ /**
+ * Stores a combination of #Flag values.
+ */
+ Q_DECLARE_FLAGS(Flags, Flag)
+
+ /**
+ * Constructs a new KJobUiDelegate.
+ */
+ KJobUiDelegate();
+
+ /**
+ * Constructs a new KJobUiDelegate with a flags argument.
+ * @param flags allows to enable automatic error/warning handling
+ * @since 5.70
+ */
+ explicit KJobUiDelegate(Flags flags); // KF6 TODO merge with default constructor, using AutoHandlingDisabled as default value
+
+ /**
+ * Destroys a KJobUiDelegate.
+ */
+ ~KJobUiDelegate() override;
+
+protected:
+ /**
+ * Attach this UI delegate to a job. Once attached it'll track the job events.
+ *
+ * @return @c true if this UI delegate was successfully attached to @p job, @c false otherwise
+ *
+ * @note if this UI delegate is already attached to a job, calling this method will return
+ * @c false.
+ */
+ virtual bool setJob(KJob *job);
+
+protected:
+ /**
+ * Retrieves the current job this UI delegate is attached to.
+ *
+ * @return current job this UI delegate is attached to, or @c nullptr if
+ * this UI delegate is not tracking any job
+ */
+ KJob *job() const;
+
+ friend class KJob;
+
+public:
+ /**
+ * Display to the user the error given by this job.
+ * The default implementation uses qWarning(). Subclasses
+ * reimplement this to use something more user-visible such
+ * as a message box.
+ *
+ * Only call this method if error is not 0, and only in the
+ * slot connected to result.
+ */
+ virtual void showErrorMessage();
+
+ /**
+ * Enable or disable the automatic error handling. When automatic
+ * error handling is enabled and an error occurs, then showErrorDialog()
+ * is called, right before the emission of the result signal.
+ *
+ * The default is false.
+ *
+ * See also isAutoErrorHandlingEnabled , showErrorDialog
+ *
+ * @param enable enable or disable automatic error handling
+ * @see isAutoErrorHandlingEnabled()
+ */
+ void setAutoErrorHandlingEnabled(bool enable);
+
+ /**
+ * Returns whether automatic error handling is enabled or disabled.
+ * See also setAutoErrorHandlingEnabled .
+ * @return true if automatic error handling is enabled
+ * @see setAutoErrorHandlingEnabled()
+ */
+ bool isAutoErrorHandlingEnabled() const;
+
+ /**
+ * Enable or disable the automatic warning handling. When automatic
+ * warning handling is enabled and an error occurs, then a message box
+ * is displayed with the warning message
+ *
+ * The default is true.
+ *
+ * See also isAutoWarningHandlingEnabled , showErrorDialog
+ *
+ * @param enable enable or disable automatic warning handling
+ * @see isAutoWarningHandlingEnabled()
+ */
+ void setAutoWarningHandlingEnabled(bool enable);
+
+ /**
+ * Returns whether automatic warning handling is enabled or disabled.
+ * See also setAutoWarningHandlingEnabled .
+ * @return true if automatic warning handling is enabled
+ * @see setAutoWarningHandlingEnabled()
+ */
+ bool isAutoWarningHandlingEnabled() const;
+
+protected Q_SLOTS:
+ virtual void slotWarning(KJob *job, const QString &plain, const QString &rich);
+
+private:
+ void connectJob(KJob *job);
+
+private:
+ std::unique_ptr<class KJobUiDelegatePrivate> const d;
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(KJobUiDelegate::Flags)
+
+#endif // KJOBUIDELEGATE_H
--- /dev/null
+/*
+ This file is part of the KDE Libraries
+
+ SPDX-FileCopyrightText: 2000 Espen Sand <espen@kde.org>
+ SPDX-FileCopyrightText: 2006 Nicolas GOUTTE <goutte@kde.org>
+ SPDX-FileCopyrightText: 2008 Friedrich W. H. Kossebau <kossebau@kde.org>
+ SPDX-FileCopyrightText: 2010 Teo Mrnjavac <teo@kde.org>
+ SPDX-FileCopyrightText: 2017 Harald Sitter <sitter@kde.org>
+ SPDX-FileCopyrightText: 2021 Julius Künzel <jk.kdedev@smartlab.uber.space>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kaboutdata.h"
+#include "kpluginmetadata.h"
+
+#include <QCommandLineOption>
+#include <QCommandLineParser>
+#include <QCoreApplication>
+#include <QFile>
+#include <QHash>
+#include <QJsonObject>
+#include <QList>
+#include <QLoggingCategory>
+#include <QSharedData>
+#include <QStandardPaths>
+#include <QTextStream>
+#include <QUrl>
+
+#include <algorithm>
+
+Q_DECLARE_LOGGING_CATEGORY(KABOUTDATA)
+// logging category for this framework, default: log stuff >= warning
+Q_LOGGING_CATEGORY(KABOUTDATA, "kf.coreaddons.kaboutdata", QtWarningMsg)
+
+class KAboutPersonPrivate : public QSharedData
+{
+public:
+ QString _name;
+ QString _task;
+ QString _emailAddress;
+ QString _webAddress;
+ QString _ocsUsername;
+};
+
+KAboutPerson::KAboutPerson(const QString &_name, const QString &_task, const QString &_emailAddress, const QString &_webAddress, const QString &_ocsUsername)
+ : d(new KAboutPersonPrivate)
+{
+ d->_name = _name;
+ d->_task = _task;
+ d->_emailAddress = _emailAddress;
+ d->_webAddress = _webAddress;
+ d->_ocsUsername = _ocsUsername;
+}
+
+KAboutPerson::KAboutPerson(const QString &_name, const QString &_email, bool)
+ : d(new KAboutPersonPrivate)
+{
+ d->_name = _name;
+ d->_emailAddress = _email;
+}
+
+KAboutPerson::KAboutPerson(const KAboutPerson &other) = default;
+
+KAboutPerson::~KAboutPerson() = default;
+
+QString KAboutPerson::name() const
+{
+ return d->_name;
+}
+
+QString KAboutPerson::task() const
+{
+ return d->_task;
+}
+
+QString KAboutPerson::emailAddress() const
+{
+ return d->_emailAddress;
+}
+
+QString KAboutPerson::webAddress() const
+{
+ return d->_webAddress;
+}
+
+QString KAboutPerson::ocsUsername() const
+{
+ return d->_ocsUsername;
+}
+
+KAboutPerson &KAboutPerson::operator=(const KAboutPerson &other) = default;
+
+KAboutPerson KAboutPerson::fromJSON(const QJsonObject &obj)
+{
+ const QString name = KPluginMetaData::readTranslatedString(obj, QStringLiteral("Name"));
+ const QString task = KPluginMetaData::readTranslatedString(obj, QStringLiteral("Task"));
+ const QString email = obj[QStringLiteral("Email")].toString();
+ const QString website = obj[QStringLiteral("Website")].toString();
+ const QString userName = obj[QStringLiteral("UserName")].toString();
+ return KAboutPerson(name, task, email, website, userName);
+}
+
+class KAboutLicensePrivate : public QSharedData
+{
+public:
+ KAboutLicensePrivate(KAboutLicense::LicenseKey licenseType, KAboutLicense::VersionRestriction versionRestriction, const KAboutData *aboutData);
+ KAboutLicensePrivate(const KAboutLicensePrivate &other);
+
+ QString spdxID() const;
+
+ KAboutLicense::LicenseKey _licenseKey;
+ QString _licenseText;
+ QString _pathToLicenseTextFile;
+ KAboutLicense::VersionRestriction _versionRestriction;
+ // needed for access to the possibly changing copyrightStatement()
+ const KAboutData *_aboutData;
+};
+
+KAboutLicensePrivate::KAboutLicensePrivate(KAboutLicense::LicenseKey licenseType,
+ KAboutLicense::VersionRestriction versionRestriction,
+ const KAboutData *aboutData)
+ : QSharedData()
+ , _licenseKey(licenseType)
+ , _versionRestriction(versionRestriction)
+ , _aboutData(aboutData)
+{
+}
+
+KAboutLicensePrivate::KAboutLicensePrivate(const KAboutLicensePrivate &other)
+ : QSharedData(other)
+ , _licenseKey(other._licenseKey)
+ , _licenseText(other._licenseText)
+ , _pathToLicenseTextFile(other._pathToLicenseTextFile)
+ , _versionRestriction(other._versionRestriction)
+ , _aboutData(other._aboutData)
+{
+}
+
+QString KAboutLicensePrivate::spdxID() const
+{
+ switch (_licenseKey) {
+ case KAboutLicense::GPL_V2:
+ return QStringLiteral("GPL-2.0");
+ case KAboutLicense::LGPL_V2:
+ return QStringLiteral("LGPL-2.0");
+ case KAboutLicense::BSDL:
+ return QStringLiteral("BSD-2-Clause");
+ case KAboutLicense::Artistic:
+ return QStringLiteral("Artistic-1.0");
+ case KAboutLicense::QPL_V1_0:
+ return QStringLiteral("QPL-1.0");
+ case KAboutLicense::GPL_V3:
+ return QStringLiteral("GPL-3.0");
+ case KAboutLicense::LGPL_V3:
+ return QStringLiteral("LGPL-3.0");
+ case KAboutLicense::LGPL_V2_1:
+ return QStringLiteral("LGPL-2.1");
+ case KAboutLicense::Custom:
+ case KAboutLicense::File:
+ case KAboutLicense::Unknown:
+ return QString();
+ }
+ return QString();
+}
+
+KAboutLicense::KAboutLicense()
+ : d(new KAboutLicensePrivate(Unknown, {}, nullptr))
+{
+}
+
+KAboutLicense::KAboutLicense(LicenseKey licenseType, VersionRestriction versionRestriction, const KAboutData *aboutData)
+ : d(new KAboutLicensePrivate(licenseType, versionRestriction, aboutData))
+{
+}
+
+KAboutLicense::KAboutLicense(LicenseKey licenseType, const KAboutData *aboutData)
+ : d(new KAboutLicensePrivate(licenseType, OnlyThisVersion, aboutData))
+{
+}
+
+KAboutLicense::KAboutLicense(const KAboutData *aboutData)
+ : d(new KAboutLicensePrivate(Unknown, OnlyThisVersion, aboutData))
+{
+}
+
+KAboutLicense::KAboutLicense(const KAboutLicense &other)
+ : d(other.d)
+{
+}
+
+KAboutLicense::~KAboutLicense()
+{
+}
+
+void KAboutLicense::setLicenseFromPath(const QString &pathToFile)
+{
+ d->_licenseKey = KAboutLicense::File;
+ d->_pathToLicenseTextFile = pathToFile;
+}
+
+void KAboutLicense::setLicenseFromText(const QString &licenseText)
+{
+ d->_licenseKey = KAboutLicense::Custom;
+ d->_licenseText = licenseText;
+}
+
+QString KAboutLicense::text() const
+{
+ QString result;
+
+ const QString lineFeed = QStringLiteral("\n\n");
+
+ if (d->_aboutData && !d->_aboutData->copyrightStatement().isEmpty()) {
+ result = d->_aboutData->copyrightStatement() + lineFeed;
+ }
+
+ bool knownLicense = false;
+ QString pathToFile; // rel path if known license
+ switch (d->_licenseKey) {
+ case KAboutLicense::File:
+ pathToFile = d->_pathToLicenseTextFile;
+ break;
+ case KAboutLicense::GPL_V2:
+ knownLicense = true;
+ pathToFile = QStringLiteral("GPL_V2");
+ break;
+ case KAboutLicense::LGPL_V2:
+ knownLicense = true;
+ pathToFile = QStringLiteral("LGPL_V2");
+ break;
+ case KAboutLicense::BSDL:
+ knownLicense = true;
+ pathToFile = QStringLiteral("BSD");
+ break;
+ case KAboutLicense::Artistic:
+ knownLicense = true;
+ pathToFile = QStringLiteral("ARTISTIC");
+ break;
+ case KAboutLicense::QPL_V1_0:
+ knownLicense = true;
+ pathToFile = QStringLiteral("QPL_V1.0");
+ break;
+ case KAboutLicense::GPL_V3:
+ knownLicense = true;
+ pathToFile = QStringLiteral("GPL_V3");
+ break;
+ case KAboutLicense::LGPL_V3:
+ knownLicense = true;
+ pathToFile = QStringLiteral("LGPL_V3");
+ break;
+ case KAboutLicense::LGPL_V2_1:
+ knownLicense = true;
+ pathToFile = QStringLiteral("LGPL_V21");
+ break;
+ case KAboutLicense::Custom:
+ if (!d->_licenseText.isEmpty()) {
+ result = d->_licenseText;
+ break;
+ }
+ Q_FALLTHROUGH();
+ // fall through
+ default:
+ result += QCoreApplication::translate("KAboutLicense",
+ "No licensing terms for this program have been specified.\n"
+ "Please check the documentation or the source for any\n"
+ "licensing terms.\n");
+ }
+
+ if (knownLicense) {
+ pathToFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QLatin1String("kf5/licenses/") + pathToFile);
+ result += QCoreApplication::translate("KAboutLicense", "This program is distributed under the terms of the %1.").arg(name(KAboutLicense::ShortName));
+ if (!pathToFile.isEmpty()) {
+ result += lineFeed;
+ }
+ }
+
+ if (!pathToFile.isEmpty()) {
+ QFile file(pathToFile);
+ if (file.open(QIODevice::ReadOnly)) {
+ QTextStream str(&file);
+ result += str.readAll();
+ }
+ }
+
+ return result;
+}
+
+QString KAboutLicense::spdx() const
+{
+ // SPDX licenses are comprised of an identifier (e.g. GPL-2.0), an optional + to denote 'or
+ // later versions' and optional ' WITH $exception' to denote standardized exceptions from the
+ // core license. As we do not offer exceptions we effectively only return GPL-2.0 or GPL-2.0+,
+ // this may change in the future. To that end the documentation makes no assertions about the
+ // actual content of the SPDX license expression we return.
+ // Expressions can in theory also contain AND, OR and () to build constructs involving more than
+ // one license. As this is outside the scope of a single license object we'll ignore this here
+ // for now.
+ // The expectation is that the return value is only run through spec-compliant parsers, so this
+ // can potentially be changed.
+
+ auto id = d->spdxID();
+ if (id.isNull()) { // Guard against potential future changes which would allow 'Foo+' as input.
+ return id;
+ }
+ return d->_versionRestriction == OrLaterVersions ? id.append(QLatin1Char('+')) : id;
+}
+
+QString KAboutLicense::name(KAboutLicense::NameFormat formatName) const
+{
+ QString licenseShort;
+ QString licenseFull;
+
+ switch (d->_licenseKey) {
+ case KAboutLicense::GPL_V2:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "GPL v2", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "GNU General Public License Version 2", "@item license");
+ break;
+ case KAboutLicense::LGPL_V2:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "LGPL v2", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "GNU Lesser General Public License Version 2", "@item license");
+ break;
+ case KAboutLicense::BSDL:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "BSD License", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "BSD License", "@item license");
+ break;
+ case KAboutLicense::Artistic:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "Artistic License", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "Artistic License", "@item license");
+ break;
+ case KAboutLicense::QPL_V1_0:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "QPL v1.0", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "Q Public License", "@item license");
+ break;
+ case KAboutLicense::GPL_V3:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "GPL v3", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "GNU General Public License Version 3", "@item license");
+ break;
+ case KAboutLicense::LGPL_V3:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "LGPL v3", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "GNU Lesser General Public License Version 3", "@item license");
+ break;
+ case KAboutLicense::LGPL_V2_1:
+ licenseShort = QCoreApplication::translate("KAboutLicense", "LGPL v2.1", "@item license (short name)");
+ licenseFull = QCoreApplication::translate("KAboutLicense", "GNU Lesser General Public License Version 2.1", "@item license");
+ break;
+ case KAboutLicense::Custom:
+ case KAboutLicense::File:
+ licenseShort = licenseFull = QCoreApplication::translate("KAboutLicense", "Custom", "@item license");
+ break;
+ default:
+ licenseShort = licenseFull = QCoreApplication::translate("KAboutLicense", "Not specified", "@item license");
+ }
+
+ const QString result = (formatName == KAboutLicense::ShortName) ? licenseShort : (formatName == KAboutLicense::FullName) ? licenseFull : QString();
+
+ return result;
+}
+
+KAboutLicense &KAboutLicense::operator=(const KAboutLicense &other)
+{
+ d = other.d;
+ return *this;
+}
+
+KAboutLicense::LicenseKey KAboutLicense::key() const
+{
+ return d->_licenseKey;
+}
+
+KAboutLicense KAboutLicense::byKeyword(const QString &rawKeyword)
+{
+ // Setup keyword->enum dictionary on first call.
+ // Use normalized keywords, by the algorithm below.
+ static const QHash<QByteArray, KAboutLicense::LicenseKey> licenseDict{
+ {"gpl", KAboutLicense::GPL}, {"gplv2", KAboutLicense::GPL_V2},
+ {"gplv2+", KAboutLicense::GPL_V2}, {"gpl20", KAboutLicense::GPL_V2},
+ {"gpl20+", KAboutLicense::GPL_V2}, {"lgpl", KAboutLicense::LGPL},
+ {"lgplv2", KAboutLicense::LGPL_V2}, {"lgplv2+", KAboutLicense::LGPL_V2},
+ {"lgpl20", KAboutLicense::LGPL_V2}, {"lgpl20+", KAboutLicense::LGPL_V2},
+ {"bsd", KAboutLicense::BSDL}, {"bsd2clause", KAboutLicense::BSDL},
+ {"artistic", KAboutLicense::Artistic}, {"artistic10", KAboutLicense::Artistic},
+ {"qpl", KAboutLicense::QPL}, {"qplv1", KAboutLicense::QPL_V1_0},
+ {"qplv10", KAboutLicense::QPL_V1_0}, {"qpl10", KAboutLicense::QPL_V1_0},
+ {"gplv3", KAboutLicense::GPL_V3}, {"gplv3+", KAboutLicense::GPL_V3},
+ {"gpl30", KAboutLicense::GPL_V3}, {"gpl30+", KAboutLicense::GPL_V3},
+ {"lgplv3", KAboutLicense::LGPL_V3}, {"lgplv3+", KAboutLicense::LGPL_V3},
+ {"lgpl30", KAboutLicense::LGPL_V3}, {"lgpl30+", KAboutLicense::LGPL_V3},
+ {"lgplv21", KAboutLicense::LGPL_V2_1}, {"lgplv21+", KAboutLicense::LGPL_V2_1},
+ {"lgpl21", KAboutLicense::LGPL_V2_1}, {"lgpl21+", KAboutLicense::LGPL_V2_1},
+ };
+
+ // Normalize keyword.
+ QString keyword = rawKeyword;
+ keyword = keyword.toLower();
+ keyword.remove(QLatin1Char(' '));
+ keyword.remove(QLatin1Char('.'));
+ keyword.remove(QLatin1Char('-'));
+
+ LicenseKey license = licenseDict.value(keyword.toLatin1(), KAboutLicense::Custom);
+ auto restriction = keyword.endsWith(QLatin1Char('+')) ? OrLaterVersions : OnlyThisVersion;
+ return KAboutLicense(license, restriction, nullptr);
+}
+
+class KAboutComponentPrivate : public QSharedData
+{
+public:
+ QString _name;
+ QString _description;
+ QString _version;
+ QString _webAddress;
+ KAboutLicense _license;
+};
+
+KAboutComponent::KAboutComponent(const QString &_name, const QString &_description, const QString &_version, const QString &_webAddress, enum KAboutLicense::LicenseKey licenseType)
+ : d(new KAboutComponentPrivate)
+{
+ d->_name = _name;
+ d->_description = _description;
+ d->_version = _version;
+ d->_webAddress = _webAddress;
+ d->_license = KAboutLicense(licenseType, nullptr);
+}
+
+KAboutComponent::KAboutComponent(const QString &_name, const QString &_description, const QString &_version, const QString &_webAddress, const QString &pathToLicenseFile)
+ : d(new KAboutComponentPrivate)
+{
+ d->_name = _name;
+ d->_description = _description;
+ d->_version = _version;
+ d->_webAddress = _webAddress;
+ d->_license = KAboutLicense();
+ d->_license.setLicenseFromPath(pathToLicenseFile);
+}
+
+KAboutComponent::KAboutComponent(const KAboutComponent &other) = default;
+
+KAboutComponent::~KAboutComponent() = default;
+
+QString KAboutComponent::name() const
+{
+ return d->_name;
+}
+
+QString KAboutComponent::description() const
+{
+ return d->_description;
+}
+
+QString KAboutComponent::version() const
+{
+ return d->_version;
+}
+
+QString KAboutComponent::webAddress() const
+{
+ return d->_webAddress;
+}
+
+KAboutLicense KAboutComponent::license() const
+{
+ return d->_license;
+}
+
+KAboutComponent &KAboutComponent::operator=(const KAboutComponent &other) = default;
+
+class KAboutDataPrivate
+{
+public:
+ KAboutDataPrivate()
+ : customAuthorTextEnabled(false)
+ {
+ }
+ QString _componentName;
+ QString _displayName;
+ QString _shortDescription;
+ QString _copyrightStatement;
+ QString _otherText;
+ QString _homepageAddress;
+ QList<KAboutPerson> _authorList;
+ QList<KAboutPerson> _creditList;
+ QList<KAboutPerson> _translatorList;
+ QList<KAboutComponent> _componentList;
+ QList<KAboutLicense> _licenseList;
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 2)
+ QString programIconName;
+#endif
+ QVariant programLogo;
+ QString customAuthorPlainText, customAuthorRichText;
+ bool customAuthorTextEnabled;
+
+ QString organizationDomain;
+ QString _ocsProviderUrl;
+ QString desktopFileName;
+
+ // Everything dr.konqi needs, we store as utf-8, so we
+ // can just give it a pointer, w/o any allocations.
+ QByteArray _internalProgramName;
+ QByteArray _version;
+ QByteArray _bugAddress;
+ QByteArray productName;
+
+ static QList<KAboutPerson> parseTranslators(const QString &translatorName, const QString &translatorEmail);
+};
+
+KAboutData::KAboutData(const QString &_componentName,
+ const QString &_displayName,
+ const QString &_version,
+ const QString &_shortDescription,
+ enum KAboutLicense::LicenseKey licenseType,
+ const QString &_copyrightStatement,
+ const QString &text,
+ const QString &homePageAddress,
+ const QString &bugAddress)
+ : d(new KAboutDataPrivate)
+{
+ d->_componentName = _componentName;
+ int p = d->_componentName.indexOf(QLatin1Char('/'));
+ if (p >= 0) {
+ d->_componentName = d->_componentName.mid(p + 1);
+ }
+
+ d->_displayName = _displayName;
+ if (!d->_displayName.isEmpty()) { // KComponentData("klauncher") gives empty program name
+ d->_internalProgramName = _displayName.toUtf8();
+ }
+ d->_version = _version.toUtf8();
+ d->_shortDescription = _shortDescription;
+ d->_licenseList.append(KAboutLicense(licenseType, this));
+ d->_copyrightStatement = _copyrightStatement;
+ d->_otherText = text;
+ d->_homepageAddress = homePageAddress;
+ d->_bugAddress = bugAddress.toUtf8();
+
+ QUrl homePageUrl(homePageAddress);
+ if (!homePageUrl.isValid() || homePageUrl.scheme().isEmpty()) {
+ // Default domain if nothing else is better
+ homePageUrl.setUrl(QStringLiteral("https://kde.org/"));
+ }
+
+ const QChar dotChar(QLatin1Char('.'));
+ QStringList hostComponents = homePageUrl.host().split(dotChar);
+
+ // Remove leading component unless 2 (or less) components are present
+ if (hostComponents.size() > 2) {
+ hostComponents.removeFirst();
+ }
+
+ d->organizationDomain = hostComponents.join(dotChar);
+
+ // KF6: do not set a default desktopFileName value here, but remove this code and leave it empty
+ // see KAboutData::desktopFileName() for details
+
+ // desktop file name is reverse domain name
+ std::reverse(hostComponents.begin(), hostComponents.end());
+ hostComponents.append(_componentName);
+
+ d->desktopFileName = hostComponents.join(dotChar);
+}
+
+KAboutData::KAboutData(const QString &_componentName, const QString &_displayName, const QString &_version)
+ : d(new KAboutDataPrivate)
+{
+ d->_componentName = _componentName;
+ int p = d->_componentName.indexOf(QLatin1Char('/'));
+ if (p >= 0) {
+ d->_componentName = d->_componentName.mid(p + 1);
+ }
+
+ d->_displayName = _displayName;
+ if (!d->_displayName.isEmpty()) { // KComponentData("klauncher") gives empty program name
+ d->_internalProgramName = _displayName.toUtf8();
+ }
+ d->_version = _version.toUtf8();
+
+ // match behaviour of other constructors
+ d->_licenseList.append(KAboutLicense(KAboutLicense::Unknown, this));
+ d->_bugAddress = "submit@bugs.kde.org";
+ d->organizationDomain = QStringLiteral("kde.org");
+ // KF6: do not set a default desktopFileName value here, but remove this code and leave it empty
+ // see KAboutData::desktopFileName() for details
+ d->desktopFileName = QLatin1String("org.kde.") + d->_componentName;
+}
+
+KAboutData::~KAboutData() = default;
+
+KAboutData::KAboutData(const KAboutData &other)
+ : d(new KAboutDataPrivate)
+{
+ *d = *other.d;
+ QList<KAboutLicense>::iterator it = d->_licenseList.begin(), itEnd = d->_licenseList.end();
+ for (; it != itEnd; ++it) {
+ KAboutLicense &al = *it;
+ al.d.detach();
+ al.d->_aboutData = this;
+ }
+}
+
+KAboutData &KAboutData::operator=(const KAboutData &other)
+{
+ if (this != &other) {
+ *d = *other.d;
+ QList<KAboutLicense>::iterator it = d->_licenseList.begin(), itEnd = d->_licenseList.end();
+ for (; it != itEnd; ++it) {
+ KAboutLicense &al = *it;
+ al.d.detach();
+ al.d->_aboutData = this;
+ }
+ }
+ return *this;
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 65)
+KAboutData KAboutData::fromPluginMetaData(const KPluginMetaData &plugin)
+{
+ KAboutData ret(plugin.pluginId(),
+ plugin.name(),
+ plugin.version(),
+ plugin.description(),
+ KAboutLicense::byKeyword(plugin.license()).key(),
+ plugin.copyrightText(),
+ plugin.extraInformation(),
+ plugin.website());
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 2)
+ ret.d->programIconName = plugin.iconName();
+#endif
+ ret.d->_authorList = plugin.authors();
+ ret.d->_translatorList = plugin.translators();
+ ret.d->_creditList = plugin.otherContributors();
+ return ret;
+}
+#endif
+
+KAboutData &KAboutData::addAuthor(const QString &name, const QString &task, const QString &emailAddress, const QString &webAddress, const QString &ocsUsername)
+{
+ d->_authorList.append(KAboutPerson(name, task, emailAddress, webAddress, ocsUsername));
+ return *this;
+}
+
+KAboutData &KAboutData::addCredit(const QString &name, const QString &task, const QString &emailAddress, const QString &webAddress, const QString &ocsUsername)
+{
+ d->_creditList.append(KAboutPerson(name, task, emailAddress, webAddress, ocsUsername));
+ return *this;
+}
+
+KAboutData &KAboutData::setTranslator(const QString &name, const QString &emailAddress)
+{
+ d->_translatorList = KAboutDataPrivate::parseTranslators(name, emailAddress);
+ return *this;
+}
+
+KAboutData &KAboutData::addComponent(const QString &name, const QString &description, const QString &version, const QString &webAddress, KAboutLicense::LicenseKey licenseKey)
+{
+ d->_componentList.append(KAboutComponent(name, description, version, webAddress, licenseKey));
+ return *this;
+}
+
+KAboutData &KAboutData::addComponent(const QString &name, const QString &description, const QString &version, const QString &webAddress, const QString &pathToLicenseFile)
+{
+ d->_componentList.append(KAboutComponent(name, description, version, webAddress, pathToLicenseFile));
+ return *this;
+}
+
+KAboutData &KAboutData::setLicenseText(const QString &licenseText)
+{
+ d->_licenseList[0] = KAboutLicense(this);
+ d->_licenseList[0].setLicenseFromText(licenseText);
+ return *this;
+}
+
+KAboutData &KAboutData::addLicenseText(const QString &licenseText)
+{
+ // if the default license is unknown, overwrite instead of append
+ KAboutLicense &firstLicense = d->_licenseList[0];
+ KAboutLicense newLicense(this);
+ newLicense.setLicenseFromText(licenseText);
+ if (d->_licenseList.count() == 1 && firstLicense.d->_licenseKey == KAboutLicense::Unknown) {
+ firstLicense = newLicense;
+ } else {
+ d->_licenseList.append(newLicense);
+ }
+
+ return *this;
+}
+
+KAboutData &KAboutData::setLicenseTextFile(const QString &pathToFile)
+{
+ d->_licenseList[0] = KAboutLicense(this);
+ d->_licenseList[0].setLicenseFromPath(pathToFile);
+ return *this;
+}
+
+KAboutData &KAboutData::addLicenseTextFile(const QString &pathToFile)
+{
+ // if the default license is unknown, overwrite instead of append
+ KAboutLicense &firstLicense = d->_licenseList[0];
+ KAboutLicense newLicense(this);
+ newLicense.setLicenseFromPath(pathToFile);
+ if (d->_licenseList.count() == 1 && firstLicense.d->_licenseKey == KAboutLicense::Unknown) {
+ firstLicense = newLicense;
+ } else {
+ d->_licenseList.append(newLicense);
+ }
+ return *this;
+}
+
+KAboutData &KAboutData::setComponentName(const QString &componentName)
+{
+ d->_componentName = componentName;
+ return *this;
+}
+
+KAboutData &KAboutData::setDisplayName(const QString &_displayName)
+{
+ d->_displayName = _displayName;
+ d->_internalProgramName = _displayName.toUtf8();
+ return *this;
+}
+
+KAboutData &KAboutData::setOcsProvider(const QString &_ocsProviderUrl)
+{
+ d->_ocsProviderUrl = _ocsProviderUrl;
+ return *this;
+}
+
+KAboutData &KAboutData::setVersion(const QByteArray &_version)
+{
+ d->_version = _version;
+ return *this;
+}
+
+KAboutData &KAboutData::setShortDescription(const QString &_shortDescription)
+{
+ d->_shortDescription = _shortDescription;
+ return *this;
+}
+
+KAboutData &KAboutData::setLicense(KAboutLicense::LicenseKey licenseKey)
+{
+ return setLicense(licenseKey, KAboutLicense::OnlyThisVersion);
+}
+
+KAboutData &KAboutData::setLicense(KAboutLicense::LicenseKey licenseKey, KAboutLicense::VersionRestriction versionRestriction)
+{
+ d->_licenseList[0] = KAboutLicense(licenseKey, versionRestriction, this);
+ return *this;
+}
+
+KAboutData &KAboutData::addLicense(KAboutLicense::LicenseKey licenseKey)
+{
+ return addLicense(licenseKey, KAboutLicense::OnlyThisVersion);
+}
+
+KAboutData &KAboutData::addLicense(KAboutLicense::LicenseKey licenseKey, KAboutLicense::VersionRestriction versionRestriction)
+{
+ // if the default license is unknown, overwrite instead of append
+ KAboutLicense &firstLicense = d->_licenseList[0];
+ if (d->_licenseList.count() == 1 && firstLicense.d->_licenseKey == KAboutLicense::Unknown) {
+ firstLicense = KAboutLicense(licenseKey, versionRestriction, this);
+ } else {
+ d->_licenseList.append(KAboutLicense(licenseKey, versionRestriction, this));
+ }
+ return *this;
+}
+
+KAboutData &KAboutData::setCopyrightStatement(const QString &_copyrightStatement)
+{
+ d->_copyrightStatement = _copyrightStatement;
+ return *this;
+}
+
+KAboutData &KAboutData::setOtherText(const QString &_otherText)
+{
+ d->_otherText = _otherText;
+ return *this;
+}
+
+KAboutData &KAboutData::setHomepage(const QString &homepage)
+{
+ d->_homepageAddress = homepage;
+ return *this;
+}
+
+KAboutData &KAboutData::setBugAddress(const QByteArray &_bugAddress)
+{
+ d->_bugAddress = _bugAddress;
+ return *this;
+}
+
+KAboutData &KAboutData::setOrganizationDomain(const QByteArray &domain)
+{
+ d->organizationDomain = QString::fromLatin1(domain.data());
+ return *this;
+}
+
+KAboutData &KAboutData::setProductName(const QByteArray &_productName)
+{
+ d->productName = _productName;
+ return *this;
+}
+
+QString KAboutData::componentName() const
+{
+ return d->_componentName;
+}
+
+QString KAboutData::productName() const
+{
+ if (!d->productName.isEmpty()) {
+ return QString::fromUtf8(d->productName);
+ }
+ return componentName();
+}
+
+const char *KAboutData::internalProductName() const
+{
+ return d->productName.isEmpty() ? nullptr : d->productName.constData();
+}
+
+QString KAboutData::displayName() const
+{
+ if (!d->_displayName.isEmpty()) {
+ return d->_displayName;
+ }
+ return componentName();
+}
+
+/// @internal
+/// Return the program name. It is always pre-allocated.
+/// Needed for KCrash in particular.
+const char *KAboutData::internalProgramName() const
+{
+ return d->_internalProgramName.constData();
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 2)
+QString KAboutData::programIconName() const
+{
+ return d->programIconName.isEmpty() ? componentName() : d->programIconName;
+}
+
+KAboutData &KAboutData::setProgramIconName(const QString &iconName)
+{
+ d->programIconName = iconName;
+ return *this;
+}
+#endif
+
+QVariant KAboutData::programLogo() const
+{
+ return d->programLogo;
+}
+
+KAboutData &KAboutData::setProgramLogo(const QVariant &image)
+{
+ d->programLogo = image;
+ return *this;
+}
+
+QString KAboutData::ocsProviderUrl() const
+{
+ return d->_ocsProviderUrl;
+}
+
+QString KAboutData::version() const
+{
+ return QString::fromUtf8(d->_version.data());
+}
+
+/// @internal
+/// Return the untranslated and uninterpreted (to UTF8) string
+/// for the version information. Used in particular for KCrash.
+const char *KAboutData::internalVersion() const
+{
+ return d->_version.constData();
+}
+
+QString KAboutData::shortDescription() const
+{
+ return d->_shortDescription;
+}
+
+QString KAboutData::homepage() const
+{
+ return d->_homepageAddress;
+}
+
+QString KAboutData::bugAddress() const
+{
+ return QString::fromUtf8(d->_bugAddress.constData());
+}
+
+QString KAboutData::organizationDomain() const
+{
+ return d->organizationDomain;
+}
+
+/// @internal
+/// Return the untranslated and uninterpreted (to UTF8) string
+/// for the bug mail address. Used in particular for KCrash.
+const char *KAboutData::internalBugAddress() const
+{
+ if (d->_bugAddress.isEmpty()) {
+ return nullptr;
+ }
+ return d->_bugAddress.constData();
+}
+
+QList<KAboutPerson> KAboutData::authors() const
+{
+ return d->_authorList;
+}
+
+QList<KAboutPerson> KAboutData::credits() const
+{
+ return d->_creditList;
+}
+
+QList<KAboutPerson> KAboutDataPrivate::parseTranslators(const QString &translatorName, const QString &translatorEmail)
+{
+ QList<KAboutPerson> personList;
+ if (translatorName.isEmpty() || translatorName == QLatin1String("Your names")) {
+ return personList;
+ }
+
+ const QStringList nameList(translatorName.split(QLatin1Char(',')));
+
+ QStringList emailList;
+ if (!translatorEmail.isEmpty() && translatorEmail != QLatin1String("Your emails")) {
+ emailList = translatorEmail.split(QLatin1Char(','), Qt::KeepEmptyParts);
+ }
+
+ QStringList::const_iterator nit;
+ QStringList::const_iterator eit = emailList.constBegin();
+
+ for (nit = nameList.constBegin(); nit != nameList.constEnd(); ++nit) {
+ QString email;
+ if (eit != emailList.constEnd()) {
+ email = *eit;
+ ++eit;
+ }
+
+ personList.append(KAboutPerson((*nit).trimmed(), email.trimmed(), true));
+ }
+
+ return personList;
+}
+
+QList<KAboutPerson> KAboutData::translators() const
+{
+ return d->_translatorList;
+}
+
+QString KAboutData::aboutTranslationTeam()
+{
+ return QCoreApplication::translate("KAboutData",
+ "<p>KDE is translated into many languages thanks to the work "
+ "of the translation teams all over the world.</p>"
+ "<p>For more information on KDE internationalization "
+ "visit <a href=\"https://l10n.kde.org\">https://l10n.kde.org</a></p>",
+ "replace this with information about your translation team");
+}
+
+QString KAboutData::otherText() const
+{
+ return d->_otherText;
+}
+
+QList<KAboutComponent> KAboutData::components() const
+{
+ return d->_componentList;
+}
+
+QList<KAboutLicense> KAboutData::licenses() const
+{
+ return d->_licenseList;
+}
+
+QString KAboutData::copyrightStatement() const
+{
+ return d->_copyrightStatement;
+}
+
+QString KAboutData::customAuthorPlainText() const
+{
+ return d->customAuthorPlainText;
+}
+
+QString KAboutData::customAuthorRichText() const
+{
+ return d->customAuthorRichText;
+}
+
+bool KAboutData::customAuthorTextEnabled() const
+{
+ return d->customAuthorTextEnabled;
+}
+
+KAboutData &KAboutData::setCustomAuthorText(const QString &plainText, const QString &richText)
+{
+ d->customAuthorPlainText = plainText;
+ d->customAuthorRichText = richText;
+
+ d->customAuthorTextEnabled = true;
+
+ return *this;
+}
+
+KAboutData &KAboutData::unsetCustomAuthorText()
+{
+ d->customAuthorPlainText = QString();
+ d->customAuthorRichText = QString();
+
+ d->customAuthorTextEnabled = false;
+
+ return *this;
+}
+
+KAboutData &KAboutData::setDesktopFileName(const QString &desktopFileName)
+{
+ d->desktopFileName = desktopFileName;
+
+ return *this;
+}
+
+QString KAboutData::desktopFileName() const
+{
+ return d->desktopFileName;
+ // KF6: switch to this code and adapt API dox
+#if 0
+ // if desktopFileName has been explicitly set, use that value
+ if (!d->desktopFileName.isEmpty()) {
+ return d->desktopFileName;
+ }
+
+ // return a string calculated on-the-fly from the current org domain & component name
+ const QChar dotChar(QLatin1Char('.'));
+ QStringList hostComponents = d->organizationDomain.split(dotChar);
+
+ // desktop file name is reverse domain name
+ std::reverse(hostComponents.begin(), hostComponents.end());
+ hostComponents.append(componentName());
+
+ return hostComponents.join(dotChar);
+#endif
+}
+
+class KAboutDataRegistry
+{
+public:
+ KAboutDataRegistry()
+ : m_appData(nullptr)
+ {
+ }
+ ~KAboutDataRegistry()
+ {
+ delete m_appData;
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 76)
+ qDeleteAll(m_pluginData);
+#endif
+ }
+ KAboutDataRegistry(const KAboutDataRegistry &) = delete;
+ KAboutDataRegistry &operator=(const KAboutDataRegistry &) = delete;
+
+ KAboutData *m_appData;
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 76)
+ QHash<QString, KAboutData *> m_pluginData;
+#endif
+};
+
+Q_GLOBAL_STATIC(KAboutDataRegistry, s_registry)
+
+namespace
+{
+void warnIfOutOfSync(const char *aboutDataString, const QString &aboutDataValue, const char *appDataString, const QString &appDataValue)
+{
+ if (aboutDataValue != appDataValue) {
+ qCWarning(KABOUTDATA) << appDataString << appDataValue << "is out-of-sync with" << aboutDataString << aboutDataValue;
+ }
+}
+
+}
+
+KAboutData KAboutData::applicationData()
+{
+ QCoreApplication *app = QCoreApplication::instance();
+
+ KAboutData *aboutData = s_registry->m_appData;
+
+ // not yet existing
+ if (!aboutData) {
+ // init from current Q*Application data
+ aboutData = new KAboutData(QCoreApplication::applicationName(), QString(), QString());
+ // For applicationDisplayName & desktopFileName, which are only properties of QGuiApplication,
+ // we have to try to get them via the property system, as the static getter methods are
+ // part of QtGui only. Disadvantage: requires an app instance.
+ // Either get all or none of the properties & warn about it
+ if (app) {
+ aboutData->setOrganizationDomain(QCoreApplication::organizationDomain().toUtf8());
+ aboutData->setVersion(QCoreApplication::applicationVersion().toUtf8());
+ aboutData->setDisplayName(app->property("applicationDisplayName").toString());
+ aboutData->setDesktopFileName(app->property("desktopFileName").toString());
+ } else {
+ qCWarning(KABOUTDATA) << "Could not initialize the properties of KAboutData::applicationData by the equivalent properties from Q*Application: no "
+ "app instance (yet) existing.";
+ }
+
+ s_registry->m_appData = aboutData;
+ } else {
+ // check if in-sync with Q*Application metadata, as their setters could have been called
+ // after the last KAboutData::setApplicationData, with different values
+ warnIfOutOfSync("KAboutData::applicationData().componentName",
+ aboutData->componentName(),
+ "QCoreApplication::applicationName",
+ QCoreApplication::applicationName());
+ warnIfOutOfSync("KAboutData::applicationData().version",
+ aboutData->version(),
+ "QCoreApplication::applicationVersion",
+ QCoreApplication::applicationVersion());
+ warnIfOutOfSync("KAboutData::applicationData().organizationDomain",
+ aboutData->organizationDomain(),
+ "QCoreApplication::organizationDomain",
+ QCoreApplication::organizationDomain());
+ if (app) {
+ warnIfOutOfSync("KAboutData::applicationData().displayName",
+ aboutData->displayName(),
+ "QGuiApplication::applicationDisplayName",
+ app->property("applicationDisplayName").toString());
+ warnIfOutOfSync("KAboutData::applicationData().desktopFileName",
+ aboutData->desktopFileName(),
+ "QGuiApplication::desktopFileName",
+ app->property("desktopFileName").toString());
+ }
+ }
+
+ return *aboutData;
+}
+
+void KAboutData::setApplicationData(const KAboutData &aboutData)
+{
+ if (s_registry->m_appData) {
+ *s_registry->m_appData = aboutData;
+ } else {
+ s_registry->m_appData = new KAboutData(aboutData);
+ }
+
+ // For applicationDisplayName & desktopFileName, which are only properties of QGuiApplication,
+ // we have to try to set them via the property system, as the static getter methods are
+ // part of QtGui only. Disadvantage: requires an app instance.
+ // So set either all or none of the properties & warn about it
+ QCoreApplication *app = QCoreApplication::instance();
+ if (app) {
+ app->setApplicationVersion(aboutData.version());
+ app->setApplicationName(aboutData.componentName());
+ app->setOrganizationDomain(aboutData.organizationDomain());
+ app->setProperty("applicationDisplayName", aboutData.displayName());
+ app->setProperty("desktopFileName", aboutData.desktopFileName());
+ } else {
+ qCWarning(KABOUTDATA) << "Could not initialize the equivalent properties of Q*Application: no instance (yet) existing.";
+ }
+
+ // KF6: Rethink the current relation between KAboutData::applicationData and the Q*Application metadata
+ // Always overwriting the Q*Application metadata here, but not updating back the KAboutData
+ // in applicationData() is unbalanced and can result in out-of-sync data if the Q*Application
+ // setters have been called meanwhile
+ // Options are to remove the overlapping properties of KAboutData for cleancode, or making the
+ // overlapping properties official shadow properties of their Q*Application countparts, though
+ // that increases behavioural complexity a little.
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 76)
+void KAboutData::registerPluginData(const KAboutData &aboutData)
+{
+ auto &data = s_registry->m_pluginData[aboutData.componentName()];
+ if (data) {
+ // silently ignore double registration, assuming it's for the same plugin
+ // all of this is getting deprecated anyways, we just don't want to leak anything
+ return;
+ }
+ data = new KAboutData(aboutData);
+}
+#endif
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 76)
+KAboutData *KAboutData::pluginData(const QString &componentName)
+{
+ KAboutData *ad = s_registry->m_pluginData.value(componentName);
+ return ad;
+}
+#endif
+
+// only for KCrash (no memory allocation allowed)
+const KAboutData *KAboutData::applicationDataPointer()
+{
+ if (s_registry.exists()) {
+ return s_registry->m_appData;
+ }
+ return nullptr;
+}
+
+bool KAboutData::setupCommandLine(QCommandLineParser *parser)
+{
+ if (!d->_shortDescription.isEmpty()) {
+ parser->setApplicationDescription(d->_shortDescription);
+ }
+
+ parser->addHelpOption();
+
+ QCoreApplication *app = QCoreApplication::instance();
+ if (app && !app->applicationVersion().isEmpty()) {
+ parser->addVersionOption();
+ }
+
+ return parser->addOption(QCommandLineOption(QStringLiteral("author"), QCoreApplication::translate("KAboutData CLI", "Show author information.")))
+ && parser->addOption(QCommandLineOption(QStringLiteral("license"), QCoreApplication::translate("KAboutData CLI", "Show license information.")))
+ && parser->addOption(QCommandLineOption(QStringLiteral("desktopfile"),
+ QCoreApplication::translate("KAboutData CLI", "The base file name of the desktop entry for this application."),
+ QCoreApplication::translate("KAboutData CLI", "file name")));
+}
+
+void KAboutData::processCommandLine(QCommandLineParser *parser)
+{
+ bool foundArgument = false;
+ if (parser->isSet(QStringLiteral("author"))) {
+ foundArgument = true;
+ if (d->_authorList.isEmpty()) {
+ printf("%s\n",
+ qPrintable(QCoreApplication::translate("KAboutData CLI", "This application was written by somebody who wants to remain anonymous.")));
+ } else {
+ printf("%s\n", qPrintable(QCoreApplication::translate("KAboutData CLI", "%1 was written by:").arg(qAppName())));
+ for (const KAboutPerson &person : qAsConst(d->_authorList)) {
+ QString authorData = QLatin1String(" ") + person.name();
+ if (!person.emailAddress().isEmpty()) {
+ authorData.append(QLatin1String(" <") + person.emailAddress() + QLatin1Char('>'));
+ }
+ printf("%s\n", qPrintable(authorData));
+ }
+ }
+ if (!customAuthorTextEnabled()) {
+ if (bugAddress() == QLatin1String("submit@bugs.kde.org")) {
+ printf("%s\n", qPrintable(QCoreApplication::translate("KAboutData CLI", "Please use https://bugs.kde.org to report bugs.")));
+ } else if (!bugAddress().isEmpty()) {
+ printf("%s\n", qPrintable(QCoreApplication::translate("KAboutData CLI", "Please report bugs to %1.").arg(bugAddress())));
+ }
+ } else {
+ printf("%s\n", qPrintable(customAuthorPlainText()));
+ }
+ } else if (parser->isSet(QStringLiteral("license"))) {
+ foundArgument = true;
+ for (const KAboutLicense &license : qAsConst(d->_licenseList)) {
+ printf("%s\n", qPrintable(license.text()));
+ }
+ }
+
+ const QString desktopFileName = parser->value(QStringLiteral("desktopfile"));
+ if (!desktopFileName.isEmpty()) {
+ d->desktopFileName = desktopFileName;
+ }
+
+ if (foundArgument) {
+ ::exit(EXIT_SUCCESS);
+ }
+}
+
+template<class T>
+QVariantList listToVariant(const QList<T> &values)
+{
+ QVariantList ret;
+ ret.reserve(values.count());
+ for (const auto &license : values) {
+ ret << QVariant::fromValue(license);
+ }
+ return ret;
+}
+
+QVariantList KAboutData::licensesVariant() const
+{
+ return listToVariant(d->_licenseList);
+}
+
+QVariantList KAboutData::authorsVariant() const
+{
+ return listToVariant(d->_authorList);
+}
+
+QVariantList KAboutData::creditsVariant() const
+{
+ return listToVariant(d->_creditList);
+}
+
+QVariantList KAboutData::translatorsVariant() const
+{
+ return listToVariant(d->_translatorList);
+}
+
+QVariantList KAboutData::componentsVariant() const
+{
+ return listToVariant(d->_componentList);
+}
--- /dev/null
+/*
+ This file is part of the KDE Libraries
+
+ SPDX-FileCopyrightText: 2000 Espen Sand <espen@kde.org>
+ SPDX-FileCopyrightText: 2008 Friedrich W. H. Kossebau <kossebau@kde.org>
+ SPDX-FileCopyrightText: 2010 Teo Mrnjavac <teo@kde.org>
+ SPDX-FileCopyrightText: 2013 David Faure <faure+bluesystems@kde.org>
+ SPDX-FileCopyrightText: 2017 Harald Sitter <sitter@kde.org>
+ SPDX-FileCopyrightText: 2021 Julius Künzel <jk.kdedev@smartlab.uber.space>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KABOUTDATA_H
+#define KABOUTDATA_H
+
+#include <QSharedDataPointer>
+#include <QString>
+#include <QVariant>
+#include <kcoreaddons_export.h>
+#include <memory>
+#include <qcontainerfwd.h>
+
+class QCommandLineParser;
+class QJsonObject;
+class KAboutData;
+class KPluginMetaData;
+namespace KCrash
+{
+Q_DECL_IMPORT void defaultCrashHandler(int sig);
+}
+
+/**
+ * This class is used to store information about a person or developer.
+ * It can store the person's name, a task, an email address and a
+ * link to a home page. This class is intended for use in the
+ * KAboutData class, but it can be used elsewhere as well.
+ * Normally you should at least define the person's name.
+ * Creating a KAboutPerson object by yourself is relatively useless,
+ * but the KAboutData methods KAboutData::authors() and KAboutData::credits()
+ * return lists of KAboutPerson data objects which you can examine.
+ *
+ * Example usage within a main(), retrieving the list of people involved
+ * with a program and re-using data from one of them:
+ *
+ * @code
+ * KAboutData about("khello", i18n("KHello"), "0.1",
+ * i18n("A KDE version of Hello, world!"),
+ * KAboutLicense::LGPL,
+ * i18n("Copyright (C) 2014 Developer"));
+ *
+ * about.addAuthor(i18n("Joe Developer"), i18n("developer"), "joe@host.com", 0);
+ * QList<KAboutPerson> people = about.authors();
+ * about.addCredit(people[0].name(), people[0].task());
+ * @endcode
+ */
+class KCOREADDONS_EXPORT KAboutPerson
+{
+ Q_GADGET
+ Q_PROPERTY(QString name READ name CONSTANT)
+ Q_PROPERTY(QString task READ task CONSTANT)
+ Q_PROPERTY(QString emailAddress READ emailAddress CONSTANT)
+ Q_PROPERTY(QString webAddress READ webAddress CONSTANT)
+ Q_PROPERTY(QString ocsUsername READ ocsUsername CONSTANT)
+ friend class KAboutData;
+ friend class KAboutDataPrivate;
+
+public:
+ /**
+ * Convenience constructor
+ *
+ * @param name The name of the person.
+ *
+ * @param task The task of this person.
+ *
+ * @param emailAddress The email address of the person.
+ *
+ * @param webAddress Home page of the person.
+ *
+ * @param ocsUsername Open Collaboration Services username of the person.
+ *
+ * @p name default argument @since 5.53
+ */
+ explicit KAboutPerson(const QString &name = QString(),
+ const QString &task = QString(),
+ const QString &emailAddress = QString(),
+ const QString &webAddress = QString(),
+ const QString &ocsUsername = QString());
+
+ /**
+ * Copy constructor. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutPerson(const KAboutPerson &other);
+
+ ~KAboutPerson();
+
+ /**
+ * Assignment operator. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutPerson &operator=(const KAboutPerson &other);
+
+ /**
+ * The person's name
+ * @return the person's name (can be QString(), if it has been
+ * constructed with an empty name)
+ */
+ QString name() const;
+
+ /**
+ * The person's task
+ * @return the person's task (can be QString(), if it has been
+ * constructed with an empty task)
+ */
+ QString task() const;
+
+ /**
+ * The person's email address
+ * @return the person's email address (can be QString(), if it has been
+ * constructed with an empty email)
+ */
+ QString emailAddress() const;
+
+ /**
+ * The home page or a relevant link
+ * @return the persons home page (can be QString(), if it has been
+ * constructed with an empty home page)
+ */
+ QString webAddress() const;
+
+ /**
+ * The person's Open Collaboration Services username
+ * @return the persons OCS username (can be QString(), if it has been
+ * constructed with an empty username)
+ */
+ QString ocsUsername() const;
+
+ /**
+ * Creates a @c KAboutPerson from a JSON object with the following structure:
+ *
+ * Key | Accessor
+ * -----------| ----------------------------
+ * Name | name()
+ * Email | emailAddress()
+ * Task | task()
+ * Website | webAddress()
+ * UserName | ocsUsername()
+ *
+ * The @c Name and @c Task key are translatable (by using e.g. a "Task[de_DE]" key)
+ *
+ * @since 5.18
+ */
+ static KAboutPerson fromJSON(const QJsonObject &obj);
+
+private:
+ /**
+ * @internal Used by KAboutData to construct translator data.
+ */
+ explicit KAboutPerson(const QString &name, const QString &email, bool disambiguation);
+
+private:
+ QSharedDataPointer<class KAboutPersonPrivate> d;
+};
+
+/**
+ * This class is used to store information about a license.
+ * The license can be one of some predefined, one given as text or one
+ * that can be loaded from a file. This class is used in the KAboutData class.
+ * Explicitly creating a KAboutLicense object is not possible.
+ * If the license is wanted for a KDE component having KAboutData object,
+ * use KAboutData::licenses() to get the licenses for that component.
+ * If the license is for a non-code resource and given by a keyword
+ * (e.g. in .desktop files), try using KAboutLicense::byKeyword().
+ */
+class KCOREADDONS_EXPORT KAboutLicense
+{
+ Q_GADGET
+ Q_PROPERTY(QString name READ name CONSTANT)
+ Q_PROPERTY(QString text READ text CONSTANT)
+ Q_PROPERTY(KAboutLicense::LicenseKey key READ key CONSTANT)
+ Q_PROPERTY(QString spdx READ spdx CONSTANT)
+ friend class KAboutData;
+ friend class KAboutComponent;
+
+public:
+ /**
+ * Describes the license of the software.
+ */
+ enum LicenseKey {
+ Custom = -2,
+ File = -1,
+ Unknown = 0,
+ GPL = 1,
+ GPL_V2 = 1,
+ LGPL = 2,
+ LGPL_V2 = 2,
+ BSDL = 3,
+ Artistic = 4,
+ QPL = 5,
+ QPL_V1_0 = 5,
+ GPL_V3 = 6,
+ LGPL_V3 = 7,
+ LGPL_V2_1 = 8, ///< @since 5.25
+ };
+ Q_ENUM(LicenseKey)
+
+ /**
+ * Format of the license name.
+ */
+ enum NameFormat {
+ ShortName,
+ FullName,
+ };
+ Q_ENUM(NameFormat)
+
+ /**
+ * Whether later versions of the license are allowed.
+ */
+ enum VersionRestriction {
+ OnlyThisVersion,
+ OrLaterVersions,
+ };
+ Q_ENUM(VersionRestriction)
+
+ /**
+ * @since 5.53
+ */
+ explicit KAboutLicense();
+
+ /**
+ * Copy constructor. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutLicense(const KAboutLicense &other);
+
+ ~KAboutLicense();
+
+ /**
+ * Assignment operator. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutLicense &operator=(const KAboutLicense &other);
+
+ /**
+ * Returns the full license text. If the licenseType argument of the
+ * constructor has been used, any text defined by setLicenseText is ignored,
+ * and the standard text for the chosen license will be returned.
+ *
+ * @return The license text.
+ */
+ QString text() const;
+
+ /**
+ * Returns the license name.
+ *
+ * Default argument @since 5.53
+ *
+ * @return The license name as a string.
+ */
+ QString name(KAboutLicense::NameFormat formatName = ShortName) const;
+
+ /**
+ * Returns the license key.
+ *
+ * @return The license key as element of KAboutLicense::LicenseKey enum.
+ */
+ KAboutLicense::LicenseKey key() const;
+
+ /**
+ * Returns the SPDX license expression of this license.
+ * If the underlying license cannot be expressed as a SPDX expression a null string is returned.
+ *
+ * @note SPDX expression are expansive constructs. If you parse the return value, do it in a
+ * SPDX specification compliant manner by splitting on whitespaces to discard unwanted
+ * information or by using a complete SPDX license expression parser.
+ * @note SPDX identifiers are case-insensitive. Do not use case-sensitive checks on the return
+ * value.
+ * @see https://spdx.org/licenses
+ * @return SPDX license expression or QString() if the license has no identifier. Compliant
+ * with SPDX 2.1.
+ *
+ * @since 5.37
+ */
+ QString spdx() const;
+
+ /**
+ * Fetch a known license by a keyword/spdx ID
+ *
+ * Frequently the license data is provided by a terse keyword-like string,
+ * e.g. by a field in a .desktop file. Using this method, an application
+ * can get hold of a proper KAboutLicense object, providing that the
+ * license is one of the several known to KDE, and use it to present
+ * more human-readable information to the user.
+ *
+ * Keywords are matched by stripping all whitespace and lowercasing.
+ * The known keywords correspond to the KAboutLicense::LicenseKey enumeration,
+ * e.g. any of "LGPLV3", "LGPLv3", "LGPL v3" would match KAboutLicense::LGPL_V3.
+ * If there is no match for the keyword, a valid license object is still
+ * returned, with its name and text informing about a custom license,
+ * and its key equal to KAboutLicense::Custom.
+ *
+ * @param keyword The license keyword.
+ * @return The license object.
+ *
+ * @see KAboutLicense::LicenseKey
+ */
+ static KAboutLicense byKeyword(const QString &keyword);
+
+private:
+ /**
+ * @internal Used by KAboutData to construct a predefined license.
+ */
+ explicit KAboutLicense(enum KAboutLicense::LicenseKey licenseType, enum KAboutLicense::VersionRestriction versionRestriction, const KAboutData *aboutData);
+ /**
+ * @internal Used by KAboutData to construct a predefined license.
+ */
+ explicit KAboutLicense(enum KAboutLicense::LicenseKey licenseType, const KAboutData *aboutData);
+ /**
+ * @internal Used by KAboutData to construct a KAboutLicense
+ */
+ explicit KAboutLicense(const KAboutData *aboutData);
+ /**
+ * @internal Used by KAboutData to construct license by given text
+ */
+ void setLicenseFromPath(const QString &pathToFile);
+ /**
+ * @internal Used by KAboutData to construct license by given text
+ */
+ void setLicenseFromText(const QString &licenseText);
+
+private:
+ QSharedDataPointer<class KAboutLicensePrivate> d;
+};
+
+/**
+ * This class is used to store information about a third party component.
+ * It can store the component's name, a description, a link to a website
+ * and the license of the libary. This class is intended for use in the
+ * KAboutData class, but it can be used elsewhere as well.
+ * Normally you should at least define the libary's name.
+ * Creating a KAboutComponent object by yourself is relatively useless,
+ * but the KAboutData method KAboutData::libaries() return lists of
+ * KAboutComponent data objects which you can examine.
+ *
+ * Example usage within a main(), retrieving the list of components used
+ * by a program and re-using data from one of them:
+ *
+ * @code
+ * KAboutData about("khello", i18n("KHello"), "0.1",
+ * i18n("A KDE version of Hello, world!"),
+ * KAboutLicense::LGPL,
+ * i18n("Copyright (C) 2014 Developer"));
+ *
+ * about.addComponent(i18n("Awsom Lib"),
+ * i18n("Does awesom stuff. Copyright (C) 2014"),
+ * i18n("1.02.3"),
+ * "http://example.com",
+ * KAboutLicense::LGPL);
+ * QList<KAboutComponent> components = about.components();
+ * @endcode
+ *
+ * @since 5.84
+ */
+class KCOREADDONS_EXPORT KAboutComponent
+{
+ Q_GADGET
+ Q_PROPERTY(QString name READ name CONSTANT)
+ Q_PROPERTY(QString description READ description CONSTANT)
+ Q_PROPERTY(QString webAddress READ webAddress CONSTANT)
+ Q_PROPERTY(KAboutLicense licenses READ license CONSTANT)
+ Q_PROPERTY(QString version READ version CONSTANT)
+ friend class KAboutData;
+ friend class KAboutDataPrivate;
+
+public:
+ /**
+ * Convenience constructor
+ *
+ * @param name The name of the component.
+ *
+ * @param description The description of this component.
+ *
+ * @param version The version of this component.
+ *
+ * @param webAddress Website of the component.
+ *
+ * @param licenseType The license identifier of the component.
+ *
+ * @p name default argument
+ */
+ explicit KAboutComponent(const QString &name = QString(),
+ const QString &description = QString(),
+ const QString &version = QString(),
+ const QString &webAddress = QString(),
+ enum KAboutLicense::LicenseKey licenseType = KAboutLicense::Unknown);
+
+ /**
+ * Convenience constructor
+ *
+ * @param name The name of the component.
+ *
+ * @param description The description of this component.
+ *
+ * @param version The version of this component.
+ *
+ * @param webAddress Website of the component.
+ *
+ * @param pathToLicenseFile Path to the file in the local filesystem containing the license text.
+ * The file format has to be plain text in an encoding compatible to the local.
+ *
+ * @p name default argument
+ */
+ explicit KAboutComponent(const QString &name,
+ const QString &description,
+ const QString &version,
+ const QString &webAddress,
+ const QString &pathToLicenseFile);
+
+ /**
+ * Copy constructor. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutComponent(const KAboutComponent &other);
+
+ ~KAboutComponent();
+
+ /**
+ * Assignment operator. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutComponent &operator=(const KAboutComponent &other);
+
+ /**
+ * The component's name
+ * @return the component's name (can be QString(), if it has been
+ * constructed with an empty name)
+ */
+ QString name() const;
+
+ /**
+ * The component's description
+ * @return the component's description (can be empty)
+ */
+ QString description() const;
+
+ /**
+ * The component's version
+ * @return the component's task (can be empty)
+ */
+ QString version() const;
+
+ /**
+ * The website or a relevant link
+ * @return the component's website (can be empty)
+ */
+ QString webAddress() const;
+
+ /**
+ * The component's license
+ * @return the component's KAboutLicense
+ */
+ KAboutLicense license() const;
+
+private:
+ QSharedDataPointer<class KAboutComponentPrivate> d;
+};
+
+/**
+ * @class KAboutData kaboutdata.h KAboutData
+ *
+ * This class is used to store information about a program or plugin.
+ * It can store such values as version number, program name, home page, address
+ * for bug reporting, multiple authors and contributors
+ * (using KAboutPerson), license and copyright information.
+ *
+ * Currently, the values set here are shown by the "About" box
+ * (see KAboutDialog), used by the bug report dialog (see KBugReport),
+ * and by the help shown on command line (see KAboutData::setupCommandLine()).
+ *
+ * Porting Notes: Since KDE Frameworks 5.0, the translation catalog mechanism
+ * must be provided by your translation framework to load the correct catalog
+ * instead (eg: KLocalizedString::setApplicationDomain() for KI18n, or
+ * QCoreApplication::installTranslator() for Qt's translation system). This
+ * applies to the old setCatalogName() and catalogName() members. But see also
+ * K4AboutData in kde4support as a compatibility class.
+ *
+ * Example:
+ * Setting the metadata of an application using KAboutData in code also relying
+ * on the KDE Framework modules KI18n and KDBusAddons:
+ * @code
+ * // create QApplication instance
+ * QApplication app(argc, argv);
+ * // setup translation string domain for the i18n calls
+ * KLocalizedString::setApplicationDomain("foo");
+ * // create a KAboutData object to use for setting the application metadata
+ * KAboutData aboutData("foo", i18n("Foo"), "0.1",
+ * i18n("To Foo or not To Foo"),
+ * KAboutLicense::LGPL,
+ * i18n("Copyright 2017 Bar Foundation"), QString(),
+ * "https://www.foo-the-app.net");
+ * // overwrite default-generated values of organizationDomain & desktopFileName
+ * aboutData.setOrganizationDomain("barfoundation.org");
+ * aboutData.setDesktopFileName("org.barfoundation.foo");
+ *
+ * // set the application metadata
+ * KAboutData::setApplicationData(aboutData);
+ * // in GUI apps set the window icon manually, not covered by KAboutData
+ * // needed for environments where the icon name is not extracted from
+ * // the information in the application's desktop file
+ * QApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("foo")));
+ *
+ * // integrate with commandline argument handling
+ * QCommandLineParser parser;
+ * aboutData.setupCommandLine(&parser);
+ * // setup of app specific commandline args
+ * [...]
+ * parser.process(app);
+ * aboutData.processCommandLine(&parser);
+ *
+ * // with the application metadata set, register to the D-Bus session
+ * KDBusService programDBusService(KDBusService::Multiple | KDBusService::NoExitOnFailure);
+ * @endcode
+ *
+ * @short Holds information needed by the "About" box and other
+ * classes.
+ * @author Espen Sand (espen@kde.org), David Faure (faure@kde.org)
+ *
+ */
+class KCOREADDONS_EXPORT KAboutData
+{
+ Q_GADGET
+ Q_PROPERTY(QString displayName READ displayName CONSTANT)
+ Q_PROPERTY(QString productName READ productName CONSTANT)
+ Q_PROPERTY(QString componentName READ componentName CONSTANT)
+ Q_PROPERTY(QVariant programLogo READ programLogo CONSTANT)
+ Q_PROPERTY(QString shortDescription READ shortDescription CONSTANT)
+ Q_PROPERTY(QString homepage READ homepage CONSTANT)
+ Q_PROPERTY(QString bugAddress READ bugAddress CONSTANT)
+ Q_PROPERTY(QString version READ version CONSTANT)
+ Q_PROPERTY(QString otherText READ otherText CONSTANT)
+ Q_PROPERTY(QVariantList authors READ authorsVariant CONSTANT) // constant in practice as addAuthor is not exposed to Q_GADGET
+ Q_PROPERTY(QVariantList credits READ creditsVariant CONSTANT)
+ Q_PROPERTY(QVariantList translators READ translatorsVariant CONSTANT)
+ Q_PROPERTY(QVariantList components READ componentsVariant CONSTANT)
+ Q_PROPERTY(QVariantList licenses READ licensesVariant CONSTANT)
+ Q_PROPERTY(QString copyrightStatement READ copyrightStatement CONSTANT)
+ Q_PROPERTY(QString desktopFileName READ desktopFileName CONSTANT)
+public:
+ /**
+ * Returns the KAboutData for the application.
+ *
+ * This contains information such as authors, license, etc.,
+ * provided that setApplicationData has been called before.
+ * If not called before, the returned KAboutData will be initialized from the
+ * equivalent properties of QCoreApplication (and its subclasses),
+ * if an instance of that already exists.
+ * For the list of such properties see setApplicationData
+ * (before 5.22: limited to QCoreApplication::applicationName).
+ * @see setApplicationData
+ */
+ static KAboutData applicationData();
+
+ /**
+ * Sets the application data for this application.
+ *
+ * In addition to changing the result of applicationData(), this initializes
+ * the equivalent properties of QCoreApplication (and its subclasses) with
+ * information from @p aboutData, if an instance of that already exists.
+ * Those properties are:
+ <ul>
+ <li>QCoreApplication::applicationName</li>
+ <li>QCoreApplication::applicationVersion</li>
+ <li>QCoreApplication::organizationDomain</li>
+ <li>QGuiApplication::applicationDisplayName</li>
+ <li>QGuiApplication::desktopFileName (since 5.16)</li>
+ </ul>
+ * @see applicationData
+ */
+ static void setApplicationData(const KAboutData &aboutData);
+
+// BUILD, not ENABLE, as producers need to support the registry for backward-compat
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 76)
+ /**
+ * Register the KAboutData information for a plugin.
+ * Call this from the constructor of the plugin.
+ * This will register the plugin's @p aboutData under the component name
+ * that was set in @p aboutData.
+ * @deprecated Since 5.76. The central registry is to be removed in the future
+ * in favour of plugin type specific local registries, using KPluginMetaData.
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 76, "See API docs")
+ static void registerPluginData(const KAboutData &aboutData);
+#endif
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 76)
+ /**
+ * Return the KAboutData for the given plugin identified by @p componentName.
+ * @deprecated Since 5.76. The central registry is to be removed in the future
+ * in favour of plugin type specific local registries, using KPluginMetaData.
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 76, "See API docs")
+ static KAboutData *pluginData(const QString &componentName);
+#endif
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 65)
+ /**
+ * Creates a @c KAboutData from the given @p plugin metadata
+ *
+ * @since 5.18
+ * @deprecated Since 5.65, use KAboutPluginDialog to show info about a plugin
+ * instead of KAboutApplicationDialog, with the latter having had been the
+ * only known need for this conversion.
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 65, "See API docs")
+ static KAboutData fromPluginMetaData(const KPluginMetaData &plugin);
+#endif
+
+public:
+ /**
+ * Constructor.
+ *
+ * Porting Note: The @p catalogName parameter present in KDE4 was
+ * deprecated and removed. See also K4AboutData
+ * in kde4support if this feature is needed for compatibility purposes, or
+ * consider using componentName() instead.
+ *
+ * @param componentName The program name or plugin name used internally.
+ * Example: QStringLiteral("kwrite"). This should never be translated.
+ *
+ * @param displayName A displayable name for the program or plugin. This string
+ * should be translated. Example: i18n("KWrite")
+ *
+ * @param version The component version string. Example: QStringLiteral("1.0").
+ *
+ * @param shortDescription A short description of what the component does.
+ * This string should be translated.
+ * Example: i18n("A simple text editor.")
+ *
+ * @param licenseType The license identifier. Use setLicenseText or
+ setLicenseTextFile if you use a license not predefined here.
+ *
+ * @param copyrightStatement A copyright statement, that can look like this:
+ * i18n("Copyright (C) 1999-2000 Name"). The string specified here is
+ * taken verbatim; the author information from addAuthor is not used.
+ *
+ * @param otherText Some free form text, that can contain any kind of
+ * information. The text can contain newlines. This string
+ * should be translated.
+ *
+ * @param homePageAddress The URL to the component's homepage, including
+ * URL scheme. "http://some.domain" is correct, "some.domain" is
+ * not. Since KDE Frameworks 5.17, https and other valid URL schemes
+ * are also valid. See also the note below.
+ *
+ * @param bugAddress The bug report address string, an email address or a URL.
+ * This defaults to the kde.org bug system.
+ *
+ * @note The @p homePageAddress argument is used to derive a default organization
+ * domain for the application (which is used to register on the session D-Bus,
+ * locate the appropriate desktop file, etc.), by taking the host name and dropping
+ * the first component, unless there are less than three (e.g. "www.kde.org" -> "kde.org").
+ * Use both setOrganizationDomain(const QByteArray&) and setDesktopFileName() if their default values
+ * do not have proper values.
+ *
+ * @see setOrganizationDomain(const QByteArray&), setDesktopFileName(const QString&)
+ */
+ // KF6: remove constructor that includes catalogName, and put default
+ // values back in for shortDescription and licenseType
+ KAboutData(const QString &componentName,
+ const QString &displayName,
+ const QString &version,
+ const QString &shortDescription,
+ enum KAboutLicense::LicenseKey licenseType,
+ const QString ©rightStatement = QString(),
+ const QString &otherText = QString(),
+ const QString &homePageAddress = QString(),
+ const QString &bugAddress = QStringLiteral("submit@bugs.kde.org"));
+
+ /**
+ * Constructor.
+ *
+ * @param componentName The program name or plugin name used internally.
+ * Example: "kwrite".
+ *
+ * @param displayName A displayable name for the program or plugin. This string
+ * should be translated. Example: i18n("KWrite")
+ *
+ * @param version The component version string.
+ *
+ * Sets the property desktopFileName to "org.kde."+componentName and
+ * the property organizationDomain to "kde.org".
+ *
+ * Default arguments @since 5.53
+ *
+ * @see setOrganizationDomain(const QByteArray&), setDesktopFileName(const QString&)
+ */
+ explicit KAboutData(const QString &componentName = {}, const QString &displayName = {}, const QString &version = {});
+
+ /**
+ * Copy constructor. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutData(const KAboutData &other);
+
+ /**
+ * Assignment operator. Performs a deep copy.
+ * @param other object to copy
+ */
+ KAboutData &operator=(const KAboutData &other);
+
+ ~KAboutData();
+
+ /**
+ * Defines an author.
+ *
+ * You can call this function as many times as you need. Each entry is
+ * appended to a list. The person in the first entry is assumed to be
+ * the leader of the project.
+ *
+ * @param name The developer's name. It should be translated.
+ *
+ * @param task What the person is responsible for. This text can contain
+ * newlines. It should be translated.
+ * Can be left empty.
+ *
+ * @param emailAddress An Email address where the person can be reached.
+ * Can be left empty.
+ *
+ * @param webAddress The person's homepage or a relevant link.
+ * Start the address with "http://". "http://some.domain" is
+ * correct, "some.domain" is not. Can be left empty.
+ *
+ * @param ocsUsername The person's Open Collaboration Services username.
+ * The provider can be optionally specified with @see setOcsProvider.
+ *
+ */
+ KAboutData &addAuthor(const QString &name,
+ const QString &task = QString(),
+ const QString &emailAddress = QString(),
+ const QString &webAddress = QString(),
+ const QString &ocsUsername = QString());
+
+ /**
+ * Defines a person that deserves credit.
+ *
+ * You can call this function as many times as you need. Each entry
+ * is appended to a list.
+ *
+ * @param name The person's name. It should be translated.
+ *
+ * @param task What the person has done to deserve the honor. The
+ * text can contain newlines. It should be translated.
+ * Can be left empty.
+ *
+ * @param emailAddress An email address when the person can be reached.
+ * Can be left empty.
+ *
+ * @param webAddress The person's homepage or a relevant link.
+ * Start the address with "http://". "http://some.domain" is
+ * is correct, "some.domain" is not. Can be left empty.
+ *
+ * @param ocsUsername The person's Open Collaboration Services username.
+ * The provider can be optionally specified with @see setOcsProvider.
+ *
+ */
+ KAboutData &addCredit(const QString &name,
+ const QString &task = QString(),
+ const QString &emailAddress = QString(),
+ const QString &webAddress = QString(),
+ const QString &ocsUsername = QString());
+
+ /**
+ * @brief Sets the name(s) of the translator(s) of the GUI.
+ *
+ * The canonical use with the ki18n framework is:
+ *
+ * \code
+ * setTranslator(i18nc("NAME OF TRANSLATORS", "Your names"),
+ * i18nc("EMAIL OF TRANSLATORS", "Your emails"));
+ * \endcode
+ *
+ * If you are using a KMainWindow this is done for you automatically.
+ *
+ * The name and emailAddress are treated as lists separated with ",".
+ *
+ * If the strings are empty or "Your names"/"Your emails"
+ * respectively they will be ignored.
+ *
+ * @param name the name(s) of the translator(s)
+ * @param emailAddress the email address(es) of the translator(s)
+ * @see KAboutTranslator
+ */
+ KAboutData &setTranslator(const QString &name, const QString &emailAddress);
+
+ /**
+ * Defines a component that is used by the application.
+ *
+ * You can call this function as many times as you need. Each entry is
+ * appended to a list.
+ *
+ * @param name The component's name. It should be translated.
+ *
+ * @param description Short description of the component and maybe
+ * copyright info. This text can contain newlines. It should
+ * be translated. Can be left empty.
+ *
+ * @param version The version of the component. Can be left empty.
+ *
+ * @param webAddress The component's homepage or a relevant link.
+ * Start the address with "http://". "http://some.domain" is
+ * correct, "some.domain" is not. Can be left empty.
+ *
+ * @param licenseKey The component's license identifier. Can be left empty (i.e. KAboutLicense::Unknown)
+ *
+ * @since 5.84
+ */
+ KAboutData &addComponent(const QString &name,
+ const QString &description = QString(),
+ const QString &version = QString(),
+ const QString &webAddress = QString(),
+ KAboutLicense::LicenseKey licenseKey = KAboutLicense::Unknown);
+
+ /**
+ * Defines a component that is used by the application with a custom license text file.
+ *
+ * You can call this function as many times as you need. Each entry is
+ * appended to a list.
+ *
+ * @param name The component's name. It should be translated.
+ *
+ * @param description Short description of the component and maybe
+ * copyright info. This text can contain newlines. It should
+ * be translated. Can be left empty.
+ *
+ * @param version The version of the component. Can be left empty.
+ *
+ * @param webAddress The component's homepage or a relevant link.
+ * Start the address with "http://". "http://some.domain" is
+ * correct, "some.domain" is not. Can be left empty.
+ *
+ * @param pathToLicenseFile Path to the file in the local filesystem containing the license text.
+ * The file format has to be plain text in an encoding compatible to the local.
+ *
+ * @since 5.84
+ */
+ KAboutData &addComponent(const QString &name,
+ const QString &description,
+ const QString &version,
+ const QString &webAddress,
+ const QString &pathToLicenseFile);
+
+ /**
+ * Defines a license text, which is translated.
+ *
+ * Example:
+ * \code
+ * setLicenseText( i18n("This is my license") );
+ * \endcode
+ *
+ * @param license The license text.
+ */
+ KAboutData &setLicenseText(const QString &license);
+
+ /**
+ * Adds a license text, which is translated.
+ *
+ * If there is only one unknown license set, e.g. by using the default
+ * parameter in the constructor, that one is replaced.
+ *
+ * Example:
+ * \code
+ * addLicenseText( i18n("This is my license") );
+ * \endcode
+ *
+ * @param license The license text.
+ * @see setLicenseText, addLicense, addLicenseTextFile
+ */
+ KAboutData &addLicenseText(const QString &license);
+
+ /**
+ * Defines a license text by pointing to a file where it resides.
+ * The file format has to be plain text in an encoding compatible to the locale.
+ *
+ * @param file Path to the file in the local filesystem containing the license text.
+ */
+ KAboutData &setLicenseTextFile(const QString &file);
+
+ /**
+ * Adds a license text by pointing to a file where it resides.
+ * The file format has to be plain text in an encoding compatible to the locale.
+ *
+ * If there is only one unknown license set, e.g. by using the default
+ * parameter in the constructor, that one is replaced.
+ *
+ * @param file Path to the file in the local filesystem containing the license text.
+ * @see addLicenseText, addLicense, setLicenseTextFile
+ */
+ KAboutData &addLicenseTextFile(const QString &file);
+
+ /**
+ * Defines the component name used internally.
+ *
+ * @param componentName The application or plugin name. Example: "kate".
+ */
+ KAboutData &setComponentName(const QString &componentName);
+
+ /**
+ * Defines the displayable component name string.
+ *
+ * @param displayName The display name. This string should be
+ * translated.
+ * Example: i18n("Advanced Text Editor").
+ */
+ KAboutData &setDisplayName(const QString &displayName);
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 2)
+ /**
+ * Obsolete method
+ *
+ * This method used to set the icon name but this is no longer
+ * possible in KDE Frameworks 5 because KCoreAddons does not
+ * depend on QtGui.
+ *
+ * @param iconName name of the icon. Example: "accessories-text-editor"
+ * @see programIconName()
+ *
+ * @deprecated since 5.2, use QApplication::setWindowIcon(QIcon::fromTheme()) instead.
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 2, "Use QApplication::setWindowIcon")
+ KAboutData &setProgramIconName(const QString &iconName);
+#endif
+ /**
+ * Defines the program logo.
+ *
+ * Use this if you need to have an application logo
+ * in AboutData other than the application icon.
+ *
+ * Because KAboutData is a core class it cannot use QImage/QPixmap/QIcon directly,
+ * so this is a QVariant that should contain a QImage/QPixmap/QIcon.
+ *
+ * QIcon should be preferred, to be able to properly handle HiDPI scaling.
+ * If a QIcon is provided, it will be used at a typical size of 48x48.
+ *
+ * @param image logo image.
+ * @see programLogo()
+ */
+ KAboutData &setProgramLogo(const QVariant &image);
+
+ /**
+ * Specifies an Open Collaboration Services provider by URL.
+ * A provider file must be available for the chosen provider.
+ *
+ * Use this if you need to override the default provider.
+ *
+ * If this method is not used, all the KAboutPerson OCS usernames
+ * will be used with the openDesktop.org entry from the default
+ * provider file.
+ *
+ * @param providerUrl The provider URL as defined in the provider file.
+ */
+ KAboutData &setOcsProvider(const QString &providerUrl);
+
+ /**
+ * Defines the program version string.
+ *
+ * @param version The program version.
+ */
+ KAboutData &setVersion(const QByteArray &version);
+
+ /**
+ * Defines a short description of what the program does.
+ *
+ * @param shortDescription The program description. This string should
+ * be translated. Example: i18n("An advanced text
+ * editor with syntax highlighting support.").
+ */
+ KAboutData &setShortDescription(const QString &shortDescription);
+
+ /**
+ * Defines the license identifier.
+ *
+ * @param licenseKey The license identifier.
+ * @see addLicenseText, setLicenseText, setLicenseTextFile
+ */
+ KAboutData &setLicense(KAboutLicense::LicenseKey licenseKey);
+
+ /**
+ * Defines the license identifier.
+ *
+ * @param licenseKey The license identifier.
+ * @param versionRestriction Whether later versions of the license are also allowed.
+ * e.g. licensed under "GPL 2.0 or at your option later versions" would be OrLaterVersions.
+ * @see addLicenseText, setLicenseText, setLicenseTextFile
+ *
+ * @since 5.37
+ */
+ KAboutData &setLicense(KAboutLicense::LicenseKey licenseKey, KAboutLicense::VersionRestriction versionRestriction);
+
+ /**
+ * Adds a license identifier.
+ *
+ * If there is only one unknown license set, e.g. by using the default
+ * parameter in the constructor, that one is replaced.
+ *
+ * @param licenseKey The license identifier.
+ * @see setLicenseText, addLicenseText, addLicenseTextFile
+ */
+ KAboutData &addLicense(KAboutLicense::LicenseKey licenseKey);
+
+ /**
+ * Adds a license identifier.
+ *
+ * If there is only one unknown license set, e.g. by using the default
+ * parameter in the constructor, that one is replaced.
+ *
+ * @param licenseKey The license identifier.
+ * @param versionRestriction Whether later versions of the license are also allowed.
+ * e.g. licensed under "GPL 2.0 or at your option later versions" would be OrLaterVersions.
+ * @see setLicenseText, addLicenseText, addLicenseTextFile
+ *
+ * @since 5.37
+ */
+ KAboutData &addLicense(KAboutLicense::LicenseKey licenseKey, KAboutLicense::VersionRestriction versionRestriction);
+
+ /**
+ * Defines the copyright statement to show when displaying the license.
+ *
+ * @param copyrightStatement A copyright statement, that can look like
+ * this: i18n("Copyright (C) 1999-2000 Name"). The string specified here is
+ * taken verbatim; the author information from addAuthor is not used.
+ */
+ KAboutData &setCopyrightStatement(const QString ©rightStatement);
+
+ /**
+ * Defines the additional text to show in the about dialog.
+ *
+ * @param otherText Some free form text, that can contain any kind of
+ * information. The text can contain newlines. This string
+ * should be translated.
+ */
+ KAboutData &setOtherText(const QString &otherText);
+
+ /**
+ * Defines the program homepage.
+ *
+ * @param homepage The program homepage string.
+ * Start the address with "http://". "http://kate.kde.org"
+ * is correct but "kate.kde.org" is not.
+ */
+ KAboutData &setHomepage(const QString &homepage);
+
+ /**
+ * Defines the address where bug reports should be sent.
+ *
+ * @param bugAddress The bug report email address or URL.
+ * This defaults to the kde.org bug system.
+ */
+ KAboutData &setBugAddress(const QByteArray &bugAddress);
+
+ /**
+ * Defines the domain of the organization that wrote this application.
+ * The domain is set to kde.org by default, or the domain of the homePageAddress constructor argument,
+ * if set.
+ *
+ * Make sure to call setOrganizationDomain(const QByteArray&) if your product
+ * is not developed inside the KDE community.
+ *
+ * Used e.g. for the registration to D-Bus done by KDBusService
+ * from the KDE Frameworks KDBusAddons module.
+ *
+ * Calling this method has no effect on the value of the desktopFileName property.
+ *
+ * @note If your program should work as a D-Bus activatable service, the base name
+ * of the D-Bus service description file or of the desktop file you install must match
+ * the D-Bus "well-known name" for which the program will register.
+ * For example, KDBusService will use a name created from the reversed organization domain
+ * with the component name attached, so for an organization domain "bar.org" and a
+ * component name "foo" the name of an installed D-Bus service file needs to be
+ * "org.bar.foo.service" or the name of the installed desktop file "org.bar.foo.desktop"
+ * (and the desktopFileName property accordingly set to "org.bar.foo").
+ * For still supporting the deprecated start of services via KToolInvocation,
+ * the desktop file needs to have an entry with the key "X-DBUS-ServiceName"
+ * and a value which matches the used D-Bus "well-known name" as just described,
+ * so with the above used values it needs a line "X-DBUS-ServiceName=org.bar.foo"
+ *
+ * @param domain the domain name, for instance kde.org, koffice.org, etc.
+ *
+ * @see setDesktopFileName(const QString&)
+ */
+ KAboutData &setOrganizationDomain(const QByteArray &domain);
+
+ /**
+ * Defines the product name which will be used in the KBugReport dialog.
+ * By default it's the componentName, but you can overwrite it here to provide
+ * support for special components e.g. in the form 'product/component',
+ * such as 'kontact/summary'.
+ *
+ * @param name The name of product
+ */
+ KAboutData &setProductName(const QByteArray &name);
+
+ /**
+ * Returns the application's internal name.
+ * @return the internal program name.
+ */
+ QString componentName() const;
+
+ /**
+ * Returns the application's product name, which will be used in KBugReport
+ * dialog. By default it returns componentName(), otherwise the one which is set
+ * with setProductName()
+ *
+ * @return the product name.
+ */
+ QString productName() const;
+
+ /**
+ * @internal
+ * Provided for use by KCrash
+ */
+ const char *internalProductName() const;
+
+ /**
+ * Returns the translated program name.
+ * @return the program name (translated).
+ */
+ QString displayName() const;
+
+ /**
+ * Returns the domain name of the organization that wrote this application.
+ *
+ * @see setOrganizationDomain(const QByteArray&)
+ */
+ QString organizationDomain() const;
+
+ /**
+ * @internal
+ * Provided for use by KCrash
+ */
+ const char *internalProgramName() const;
+
+// Not using KCOREADDONS_ENABLE_DEPRECATED_SINCE because KXmlGui and KConfigWidgets need this, for compat
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 2)
+ /**
+ * Returns the program's icon name.
+ *
+ * The default value is componentName().
+ * @return the program's icon name.
+ *
+ * This is mostly for compatibility, given that setProgramIconName is deprecated.
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 2, "Use QApplication::windowIcon")
+ QString programIconName() const;
+#endif
+
+ /**
+ * Returns the program logo image.
+ *
+ * Because KAboutData is a core class it cannot use QImage/QPixmap/QIcon directly,
+ * so this is a QVariant containing a QImage/QPixmap/QIcon.
+ *
+ * @return the program logo data, or a null image if there is
+ * no custom application logo defined.
+ */
+ QVariant programLogo() const;
+
+ /**
+ * Returns the chosen Open Collaboration Services provider URL.
+ * @return the provider URL.
+ */
+ QString ocsProviderUrl() const;
+
+ /**
+ * Returns the program's version.
+ * @return the version string.
+ */
+ QString version() const;
+
+ /**
+ * @internal
+ * Provided for use by KCrash
+ */
+ const char *internalVersion() const;
+
+ /**
+ * Returns a short, translated description.
+ * @return the short description (translated). Can be
+ * QString() if not set.
+ */
+ QString shortDescription() const;
+
+ /**
+ * Returns the application homepage.
+ * @return the application homepage URL. Can be QString() if
+ * not set.
+ */
+ QString homepage() const;
+
+ /**
+ * Returns the email address or URL for bugs.
+ * @return the address where to report bugs.
+ */
+ QString bugAddress() const;
+
+ /**
+ * @internal
+ * Provided for use by KCrash
+ */
+ const char *internalBugAddress() const;
+
+ /**
+ * Returns a list of authors.
+ * @return author information (list of persons).
+ */
+ QList<KAboutPerson> authors() const;
+
+ /**
+ * Returns a list of persons who contributed.
+ * @return credit information (list of persons).
+ */
+ QList<KAboutPerson> credits() const;
+
+ /**
+ * Returns a list of translators.
+ * @return translators information (list of persons)
+ */
+ QList<KAboutPerson> translators() const;
+
+ /**
+ * Returns a message about the translation team.
+ * @return a message about the translation team
+ */
+ static QString aboutTranslationTeam();
+
+ /**
+ * Returns a list of components.
+ * @return component information (list of components).
+ * @since 5.84
+ */
+ QList<KAboutComponent> components() const;
+
+ /**
+ * Returns a translated, free form text.
+ * @return the free form text (translated). Can be QString() if not set.
+ */
+ QString otherText() const;
+
+ /**
+ * Returns a list of licenses.
+ *
+ * @return licenses information (list of licenses)
+ */
+ QList<KAboutLicense> licenses() const;
+
+ /**
+ * Returns the copyright statement.
+ * @return the copyright statement. Can be QString() if not set.
+ */
+ QString copyrightStatement() const;
+
+ /**
+ * Returns the plain text displayed around the list of authors instead
+ * of the default message telling users to send bug reports to bugAddress().
+ *
+ * @return the plain text displayed around the list of authors instead
+ * of the default message. Can be QString().
+ */
+ QString customAuthorPlainText() const;
+
+ /**
+ * Returns the rich text displayed around the list of authors instead
+ * of the default message telling users to send bug reports to bugAddress().
+ *
+ * @return the rich text displayed around the list of authors instead
+ * of the default message. Can be QString().
+ */
+ QString customAuthorRichText() const;
+
+ /**
+ * Returns whether custom text should be displayed around the list of
+ * authors.
+ *
+ * @return whether custom text should be displayed around the list of
+ * authors.
+ */
+ bool customAuthorTextEnabled() const;
+
+ /**
+ * Sets the custom text displayed around the list of authors instead
+ * of the default message telling users to send bug reports to bugAddress().
+ *
+ * @param plainText The plain text.
+ * @param richText The rich text.
+ *
+ * Setting both to parameters to QString() will cause no message to be
+ * displayed at all. Call unsetCustomAuthorText() to revert to the default
+ * message.
+ */
+ KAboutData &setCustomAuthorText(const QString &plainText, const QString &richText);
+
+ /**
+ * Clears any custom text displayed around the list of authors and falls
+ * back to the default message telling users to send bug reports to
+ * bugAddress().
+ */
+ KAboutData &unsetCustomAuthorText();
+
+ /**
+ * Configures the @p parser command line parser to provide an authors entry with
+ * information about the developers of the application and an entry specifying the license.
+ *
+ * Additionally, it will set the description to the command line parser, will add the help
+ * option and if the QApplication has a version set (e.g. via KAboutData::setApplicationData)
+ * it will also add the version option.
+ *
+ * Since 5.16 it also adds an option to set the desktop file name.
+ *
+ * @returns true if adding the options was successful; otherwise returns false.
+ *
+ * @sa processCommandLine()
+ */
+ bool setupCommandLine(QCommandLineParser *parser);
+
+ /**
+ * Reads the processed @p parser and sees if any of the arguments are the ones set
+ * up from setupCommandLine().
+ *
+ * @sa setupCommandLine()
+ */
+ void processCommandLine(QCommandLineParser *parser);
+
+ /**
+ * Sets the base name of the desktop entry for this application.
+ *
+ * This is the file name, without the full path and without extension,
+ * of the desktop entry that represents this application according to
+ * the freedesktop desktop entry specification (e.g. "org.kde.foo").
+ *
+ * A default desktop file name is constructed when the KAboutData
+ * object is created, using the reverse domain name of the
+ * organizationDomain() and the componentName() as they are at the time
+ * of the KAboutData object creation.
+ * Call this method to override that default name. Typically this is
+ * done when also setOrganizationDomain(const QByteArray&) or setComponentName(const QString&)
+ * need to be called to override the initial values.
+ *
+ * The desktop file name can also be passed to the application at runtime through
+ * the @c desktopfile command line option which is added by setupCommandLine(QCommandLineParser*).
+ * This is useful if an application supports multiple desktop files with different runtime
+ * settings.
+ *
+ * @param desktopFileName The desktop file name of this application
+ *
+ * @sa desktopFileName()
+ * @sa organizationDomain()
+ * @sa componentName()
+ * @sa setupCommandLine(QCommandLineParser*)
+ * @since 5.16
+ **/
+ KAboutData &setDesktopFileName(const QString &desktopFileName);
+
+ /**
+ * @returns The desktop file name of this application (e.g. "org.kde.foo")
+ * @sa setDesktopFileName(const QString&)
+ * @since 5.16
+ **/
+ QString desktopFileName() const;
+
+private:
+ QVariantList licensesVariant() const;
+ QVariantList authorsVariant() const;
+ QVariantList creditsVariant() const;
+ QVariantList translatorsVariant() const;
+ QVariantList componentsVariant() const;
+
+ friend void KCrash::defaultCrashHandler(int sig);
+ static const KAboutData *applicationDataPointer();
+
+private:
+ std::unique_ptr<class KAboutDataPrivate> const d;
+};
+
+Q_DECLARE_METATYPE(KAboutData)
+Q_DECLARE_METATYPE(KAboutLicense)
+Q_DECLARE_METATYPE(KAboutPerson)
+Q_DECLARE_METATYPE(KAboutComponent)
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE Libraries
+
+ SPDX-FileCopyrightText: 2016 David Edmundson <davidedmundson@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kcoreaddons.h"
+
+#include "kcoreaddons_version.h"
+
+QString KCoreAddons::versionString()
+{
+ return QStringLiteral(KCOREADDONS_VERSION_STRING);
+}
+
+uint KCoreAddons::version()
+{
+ return KCOREADDONS_VERSION;
+}
--- /dev/null
+/*
+ This file is part of the KDE Libraries
+
+ SPDX-FileCopyrightText: 2016 David Edmundson <davidedmundson@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KCOREADDONS_H
+#define KCOREADDONS_H
+
+#include <QString>
+#include <kcoreaddons_export.h>
+
+/**
+ * @namespace KCoreAddons
+ * Provides utility functions for metadata about the KCoreAddons library.
+ */
+namespace KCoreAddons
+{
+/**
+ * Returns the version number of KCoreAddons at run-time as a string (for example, "5.19.0").
+ * This may be a different version than the version the application was compiled against.
+ * @since 5.20
+ */
+KCOREADDONS_EXPORT QString versionString();
+
+/**
+ * Returns a numerical version number of KCoreAddons at run-time in the form 0xMMNNPP
+ * (MM = major, NN = minor, PP = patch)
+ * This can be compared using the macro QT_VERSION_CHECK.
+ *
+ * For example:
+ * \code
+ * if (KCoreAddons::version() < QT_VERSION_CHECK(5,19,0))
+ * \endcode
+ *
+ * This may be a different version than the version the application was compiled against.
+ * @since 5.20
+ */
+KCOREADDONS_EXPORT unsigned int version();
+}
+
+#endif
--- /dev/null
+The "Artistic License"
+
+ Preamble
+
+ The intent of this document is to state the conditions under which a
+ Package may be copied, such that the Copyright Holder maintains some
+ semblance of artistic control over the development of the package,
+ while giving the users of the package the right to use and distribute
+ the Package in a more-or-less customary fashion, plus the right to
+ make reasonable modifications.
+
+ Definitions
+
+ "Package" refers to the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection of files
+ created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been
+ modified, or has been modified in accordance with the wishes of the
+ Copyright Holder as specified below.
+
+ "Copyright Holder" is whoever is named in the copyright or
+ copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing this
+ Package.
+
+ "Reasonable copying fee" is whatever you can justify on the basis
+ of media cost, duplication charges, time of people involved, and so
+ on. (You will not be required to justify it to the Copyright
+ Holder, but only to the computing community at large as a market
+ that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item
+ itself, though there may be fees involved in handling the item. It
+ also means that recipients of the item may redistribute it under
+ the same conditions they received it.
+
+ 1. You may make and give away verbatim copies of the source form of
+ the Standard Version of this Package without restriction, provided
+ that you duplicate all of the original copyright notices and
+ associated disclaimers.
+ 2. You may apply bug fixes, portability fixes and other modifications
+ derived from the Public Domain or from the Copyright Holder. A
+ Package modified in such a way shall still be considered the
+ Standard Version.
+ 3. You may otherwise modify your copy of this Package in any way,
+ provided that you insert a prominent notice in each changed file
+ stating how and when you changed that file, and provided that you
+ do at least ONE of the following:
+
+ a. place your modifications in the Public Domain or otherwise make
+ them Freely Available, such as by posting said modifications to
+ Usenet or an equivalent medium, or placing the modifications on a
+ major archive site such as uunet.uu.net, or by allowing the
+ Copyright Holder to include your modifications in the Standard
+ Version of the Package.
+ b. use the modified Package only within your corporation or
+ organization.
+ c. rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided, and
+ provide a separate manual page for each non-standard executable
+ that clearly documents how it differs from the Standard Version.
+ d. make other distribution arrangements with the Copyright Holder.
+
+ You may distribute the programs of this Package in object code or
+ executable form, provided that you do at least ONE of the following:
+
+ a. distribute a Standard Version of the executables and library
+ files, together with instructions (in the manual page or
+ equivalent) on where to get the Standard Version.
+ b. accompany the distribution with the machine-readable source of the
+ Package with your modifications.
+ c. give non-standard executables non-standard names, and clearly
+ document the differences in manual pages (or equivalent), together
+ with instructions on where to get the Standard Version.
+ d. make other distribution arrangements with the Copyright Holder.
+
+ You may charge a reasonable copying fee for any distribution of this
+ Package. You may charge any fee you choose for support of this
+ Package. You may not charge a fee for this Package itself. However,
+ you may distribute this Package in aggregate with other (possibly
+ commercial) programs as part of a larger (possibly commercial)
+ software distribution provided that you do not advertise this Package
+ as a product of your own. You may embed this Package's interpreter
+ within an executable of yours (by linking); this shall be construed as
+ a mere form of aggregation, provided that the complete Standard
+ Version of the interpreter is so embedded.
+
+ The scripts and library files supplied as input to or produced as
+ output from the programs of this Package do not automatically fall
+ under the copyright of this Package, but belong to whomever generated
+ them, and may be sold commercially, and may be aggregated with this
+ Package. If such scripts or library files are aggregated with this
+ Package via the so-called "undump" or "unexec" methods of producing a
+ binary executable image, then distribution of such an image shall
+ neither be construed as a distribution of this Package nor shall it
+ fall under the restrictions of Paragraphs 3 and 4, provided that you
+ do not represent such an executable image as a Standard Version of
+ this Package.
+
+ C subroutines (or comparably compiled subroutines in other
+ languages) supplied by you and linked into this Package in order to
+ emulate subroutines and variables of the language defined by this
+ Package shall not be considered part of this Package, but are the
+ equivalent of input as in Paragraph 6, provided these subroutines do
+ not change the language in any way that would cause it to fail the
+ regression tests for the language.
+
+ Aggregation of this Package with a commercial distribution is always
+ permitted provided that the use of this Package is embedded; that is,
+ when no overt attempt is made to make this Package's interfaces
+ visible to the end user of the commercial distribution. Such use shall
+ not be construed as a distribution of this Package.
+
+ The name of the Copyright Holder may not be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.
+
+ THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ The End
--- /dev/null
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- /dev/null
+# Install license files for use by KAboutLicense and KAboutData
+
+install(
+ FILES
+ BSD GPL_V2 GPL_V3 LGPL_V2 LGPL_V21 LGPL_V3 QPL_V1.0 ARTISTIC
+ DESTINATION
+ ${KDE_INSTALL_DATADIR}/kf5/licenses
+)
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
--- /dev/null
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+\f
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+\f
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+\f
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+\f
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+\f
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
--- /dev/null
+ THE Q PUBLIC LICENSE
+ version 1.0
+
+ Copyright (C) 1999-2000 Troll Tech AS, Norway.
+ Everyone is permitted to copy and
+ distribute this license document.
+
+The intent of this license is to establish freedom to share and change the
+software regulated by this license under the open source model.
+
+This license applies to any software containing a notice placed by the
+copyright holder saying that it may be distributed under the terms of
+the Q Public License version 1.0. Such software is herein referred to as
+the Software. This license covers modification and distribution of the
+Software, use of third-party application programs based on the Software,
+and development of free software which uses the Software.
+
+ Granted Rights
+
+1. You are granted the non-exclusive rights set forth in this license
+ provided you agree to and comply with any and all conditions in this
+ license. Whole or partial distribution of the Software, or software
+ items that link with the Software, in any form signifies acceptance of
+ this license.
+
+2. You may copy and distribute the Software in unmodified form provided
+ that the entire package, including - but not restricted to - copyright,
+ trademark notices and disclaimers, as released by the initial developer
+ of the Software, is distributed.
+
+3. You may make modifications to the Software and distribute your
+ modifications, in a form that is separate from the Software, such as
+ patches. The following restrictions apply to modifications:
+
+ a. Modifications must not alter or remove any copyright notices in
+ the Software.
+
+ b. When modifications to the Software are released under this
+ license, a non-exclusive royalty-free right is granted to the
+ initial developer of the Software to distribute your modification
+ in future versions of the Software provided such versions remain
+ available under these terms in addition to any other license(s) of
+ the initial developer.
+
+4. You may distribute machine-executable forms of the Software or
+ machine-executable forms of modified versions of the Software, provided
+ that you meet these restrictions:
+
+ a. You must include this license document in the distribution.
+
+ b. You must ensure that all recipients of the machine-executable forms
+ are also able to receive the complete machine-readable source code
+ to the distributed Software, including all modifications, without
+ any charge beyond the costs of data transfer, and place prominent
+ notices in the distribution explaining this.
+
+ c. You must ensure that all modifications included in the
+ machine-executable forms are available under the terms of this
+ license.
+
+5. You may use the original or modified versions of the Software to
+ compile, link and run application programs legally developed by you
+ or by others.
+
+6. You may develop application programs, reusable components and other
+ software items that link with the original or modified versions of the
+ Software. These items, when distributed, are subject to the following
+ requirements:
+
+ a. You must ensure that all recipients of machine-executable forms of
+ these items are also able to receive and use the complete
+ machine-readable source code to the items without any charge
+ beyond the costs of data transfer.
+
+ b. You must explicitly license all recipients of your items to use
+ and re-distribute original and modified versions of the items in
+ both machine-executable and source code forms. The recipients must
+ be able to do so without any charges whatsoever, and they must be
+ able to re-distribute to anyone they choose.
+
+
+ c. If the items are not available to the general public, and the
+ initial developer of the Software requests a copy of the items,
+ then you must supply one.
+
+ Limitations of Liability
+
+In no event shall the initial developers or copyright holders be liable
+for any damages whatsoever, including - but not restricted to - lost
+revenue or profits or other direct, indirect, special, incidental or
+consequential damages, even if they have been advised of the possibility
+of such damages, except to the extent invariable law, if any, provides
+otherwise.
+
+ No Warranty
+
+The Software and this license document are provided AS IS with NO WARRANTY
+OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE.
+ Choice of Law
+
+This license is governed by the Laws of Norway. Disputes shall be settled
+by Oslo City Court.
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013-2014 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include "desktopfileparser_p.h"
+
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+#include "desktoptojson_debug.h"
+#else
+#include "desktopfileparser_debug.h"
+#endif
+// Qt
+#include <QCache>
+#include <QDir>
+#include <QFile>
+#include <QJsonArray>
+#include <QJsonObject>
+#include <QMutex>
+#include <QRegularExpression>
+#include <QRegularExpressionMatch>
+#include <QStandardPaths>
+
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+// use if not else to prevent wrong scoping
+#define DESKTOPTOJSON_VERBOSE_DEBUG \
+ if (!DesktopFileParser::s_verbose) { \
+ } else \
+ qCDebug(DESKTOPPARSER)
+#define DESKTOPTOJSON_VERBOSE_WARNING \
+ if (!DesktopFileParser::s_verbose) { \
+ } else \
+ qCWarning(DESKTOPPARSER)
+#else
+#define DESKTOPTOJSON_VERBOSE_DEBUG QT_NO_QDEBUG_MACRO()
+#define DESKTOPTOJSON_VERBOSE_WARNING QT_NO_QDEBUG_MACRO()
+#endif
+
+#include "../lib/kcoreaddons_export.h"
+
+using namespace DesktopFileParser;
+
+// This code was taken from KConfigGroupPrivate::deserializeList
+QStringList DesktopFileParser::deserializeList(const QString &data, char separator)
+{
+ if (data.isEmpty()) {
+ return QStringList();
+ }
+ if (data == QLatin1String("\\0")) {
+ return QStringList(QString());
+ }
+ QStringList value;
+ QString val;
+ val.reserve(data.size());
+ bool quoted = false;
+ for (int p = 0; p < data.length(); p++) {
+ if (quoted) {
+ val += data[p];
+ quoted = false;
+ } else if (data[p].unicode() == '\\') {
+ quoted = true;
+ } else if (data[p].unicode() == separator) {
+ value.append(val);
+ if (p == data.length() - 1) {
+ // don't add an empty entry to the end if the last character is a separator
+ return value;
+ }
+ val.clear();
+ val.reserve(data.size() - p);
+ } else {
+ val += data[p];
+ }
+ }
+ value.append(val);
+ return value;
+}
+
+QByteArray DesktopFileParser::escapeValue(const QByteArray &input)
+{
+ const int start = input.indexOf('\\');
+ if (start < 0) {
+ return input;
+ }
+
+ // we could do this in place, but this code is simpler
+ // this tool is probably only transitional, so no need to optimize
+ QByteArray result;
+ result.reserve(input.size());
+ result.append(input.data(), start);
+ for (int i = start; i < input.length(); ++i) {
+ if (input[i] != '\\') {
+ result.append(input[i]);
+ } else {
+ if (i + 1 >= input.length()) {
+ // just append the backslash if we are at end of line
+ result.append(input[i]);
+ break;
+ }
+ i++; // consume next character
+ char nextChar = input[i];
+ switch (nextChar) {
+ case 's':
+ result.append(' ');
+ break;
+ case 'n':
+ result.append('\n');
+ break;
+ case 't':
+ result.append('\t');
+ break;
+ case 'r':
+ result.append('\r');
+ break;
+ case '\\':
+ result.append('\\');
+ break;
+ default:
+ result.append('\\');
+ result.append(nextChar); // just ignore the escape sequence
+ }
+ }
+ }
+ return result;
+}
+
+struct CustomPropertyDefinition {
+ // default ctor needed for QVector
+ CustomPropertyDefinition()
+ : type(QVariant::String)
+ {
+ }
+ CustomPropertyDefinition(const QByteArray &key, QVariant::Type type)
+ : key(key)
+ , type(type)
+ {
+ }
+ QJsonValue fromString(const QString &str) const
+ {
+ switch (type) {
+ case QVariant::String:
+ return str;
+ case QVariant::StringList:
+ return QJsonArray::fromStringList(deserializeList(str));
+ case QVariant::Int: {
+ bool ok = false;
+ int result = str.toInt(&ok);
+ if (!ok) {
+ qCWarning(DESKTOPPARSER) << "Invalid integer value for key" << key << "-" << str;
+ return QJsonValue();
+ }
+ return QJsonValue(result);
+ }
+ case QVariant::Double: {
+ bool ok = false;
+ double result = str.toDouble(&ok);
+ if (!ok) {
+ qCWarning(DESKTOPPARSER) << "Invalid double value for key" << key << "-" << str;
+ return QJsonValue();
+ }
+ return QJsonValue(result);
+ }
+ case QVariant::Bool: {
+ bool result = str.compare(QLatin1String("true"), Qt::CaseInsensitive) == 0;
+ if (!result && str.compare(QLatin1String("false"), Qt::CaseInsensitive) != 0) {
+ qCWarning(DESKTOPPARSER) << "Invalid boolean value for key" << key << "-" << str;
+ return QJsonValue();
+ }
+ return QJsonValue(result);
+ }
+ default:
+ // This was checked when parsing the file, no other QVariant::Type values are possible
+ Q_UNREACHABLE();
+ }
+ }
+ QByteArray key;
+ QVariant::Type type;
+};
+
+namespace
+{
+bool readUntilDesktopEntryGroup(QFile &file, const QString &path, int &lineNr)
+{
+ if (!file.open(QFile::ReadOnly)) {
+ qCWarning(DESKTOPPARSER) << "Error: Failed to open " << path;
+ return false;
+ }
+ // we only convert data inside the [Desktop Entry] group
+ while (!file.atEnd()) {
+ const QByteArray line = file.readLine().trimmed();
+ lineNr++;
+ if (line == "[Desktop Entry]") {
+ return true;
+ }
+ }
+ qCWarning(DESKTOPPARSER) << "Error: Could not find [Desktop Entry] group in " << path;
+ return false;
+}
+
+QByteArray readTypeEntryForCurrentGroup(QFile &df, QByteArray *nextGroup, QByteArray *pName)
+{
+ QByteArray group = *nextGroup;
+ QByteArray type;
+ if (group.isEmpty()) {
+ qCWarning(DESKTOPPARSER, "Read empty .desktop file group name! Invalid file?");
+ }
+ while (!df.atEnd()) {
+ QByteArray line = df.readLine().trimmed();
+ // skip empty lines and comments
+ if (line.isEmpty() || line.startsWith('#')) {
+ continue;
+ }
+ if (line.startsWith('[')) {
+ if (!line.endsWith(']')) {
+ qCWarning(DESKTOPPARSER) << "Illegal .desktop group definition (does not end with ']'):" << line;
+ }
+ QByteArray name = line.mid(1, line.lastIndexOf(']') - 1).trimmed();
+ // we have reached the next group -> return current group and Type= value
+ *nextGroup = name;
+ break;
+ }
+
+ const static QRegularExpression typeEntryRegex(QStringLiteral("^Type\\s*=\\s*(.*)$"));
+ const auto match = typeEntryRegex.match(QString::fromUtf8(line));
+ if (match.hasMatch()) {
+ type = match.captured(1).toUtf8();
+ } else if (pName) {
+ const static QRegularExpression nameEntryRegex(QStringLiteral("^X-KDE-ServiceType\\s*=\\s*(.*)$"));
+ const auto nameMatch = nameEntryRegex.match(QString::fromUtf8(line));
+ if (nameMatch.hasMatch()) {
+ *pName = nameMatch.captured(1).toUtf8();
+ }
+ }
+ }
+ return type;
+}
+
+bool tokenizeKeyValue(QFile &df, const QString &src, QByteArray &key, QString &value, int &lineNr)
+{
+ const QByteArray line = df.readLine().trimmed();
+ lineNr++;
+ if (line.isEmpty()) {
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": empty";
+ return true;
+ }
+ if (line.startsWith('#')) {
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": comment";
+ return true; // skip comments
+ }
+ if (line.startsWith('[')) {
+ // start of new group -> doesn't interest us anymore
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << ": start of new group " << line;
+ return false;
+ }
+ // must have form key=value now
+ const int equalsIndex = line.indexOf('=');
+ if (equalsIndex == -1) {
+ qCWarning(DESKTOPPARSER).nospace() << qPrintable(src) << ':' << lineNr
+ << ": Line is neither comment nor group "
+ "and doesn't contain an '=' character: \""
+ << line.constData() << '\"';
+ return true;
+ }
+ // trim key and value to remove spaces around the '=' char
+ key = line.mid(0, equalsIndex).trimmed();
+ if (key.isEmpty()) {
+ qCWarning(DESKTOPPARSER).nospace() << qPrintable(src) << ':' << lineNr << ": Key name is missing: \"" << line.constData() << '\"';
+ return true;
+ }
+
+ const QByteArray valueRaw = line.mid(equalsIndex + 1).trimmed();
+ const QByteArray valueEscaped = escapeValue(valueRaw);
+ value = QString::fromUtf8(valueEscaped);
+
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+ DESKTOPTOJSON_VERBOSE_DEBUG.nospace() << "Line " << lineNr << ": key=" << key << ", value=" << value;
+ if (valueEscaped != valueRaw) {
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Line " << lineNr << " contained escape sequences";
+ }
+#endif
+
+ return true;
+}
+
+static QString locateRelativeServiceType(const QString &relPath)
+{
+ return QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kservicetypes5/") + relPath);
+}
+
+static ServiceTypeDefinition *parseServiceTypesFile(const QString &inputPath)
+{
+ int lineNr = 0;
+ QString path = inputPath;
+ if (QDir::isRelativePath(path)) {
+ path = locateRelativeServiceType(path);
+ QString rcPath;
+ if (path.isEmpty()) {
+ rcPath = QLatin1String(":/kservicetypes5/") + inputPath;
+ if (QFileInfo::exists(rcPath)) {
+ path = rcPath;
+ }
+ }
+ if (path.isEmpty()) {
+ qCWarning(DESKTOPPARSER).nospace() << "Could not locate service type file kservicetypes5/" << qPrintable(inputPath) << ", tried "
+ << QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation) << " and " << rcPath;
+ return nullptr;
+ }
+ }
+ QFile df(path);
+ if (!df.exists()) {
+ qCCritical(DESKTOPPARSER) << "Service type file" << path << "does not exist";
+ return nullptr;
+ }
+ if (!readUntilDesktopEntryGroup(df, path, lineNr)) {
+ return nullptr;
+ }
+ ServiceTypeDefinition result;
+ // TODO: passing nextGroup by pointer is inefficient as it will make deep copies every time
+ // Not exactly performance critical code though so low priority
+ QByteArray nextGroup = "Desktop Entry";
+ // Type must be ServiceType now
+ QByteArray typeStr = readTypeEntryForCurrentGroup(df, &nextGroup, &result.m_serviceTypeName);
+ if (typeStr != QByteArrayLiteral("ServiceType")) {
+ qCWarning(DESKTOPPARSER) << path << "is not a valid service type: Type entry should be 'ServiceType', got" << typeStr << "instead.";
+ return nullptr;
+ }
+ while (!df.atEnd()) {
+ QByteArray currentGroup = nextGroup;
+ typeStr = readTypeEntryForCurrentGroup(df, &nextGroup, nullptr);
+ if (!currentGroup.startsWith(QByteArrayLiteral("PropertyDef::"))) {
+ qCWarning(DESKTOPPARSER) << "Skipping invalid group" << currentGroup << "in service type" << path;
+ continue;
+ }
+ if (typeStr.isEmpty()) {
+ qCWarning(DESKTOPPARSER) << "Could not find Type= key in group" << currentGroup;
+ continue;
+ }
+ QByteArray propertyName = currentGroup.mid(qstrlen("PropertyDef::"));
+ QVariant::Type type = QVariant::nameToType(typeStr.constData());
+ switch (type) {
+ case QVariant::String:
+ case QVariant::StringList:
+ case QVariant::Int:
+ case QVariant::Double:
+ case QVariant::Bool:
+ qCDebug(DESKTOPPARSER) << "Found property definition" << propertyName << "with type" << typeStr;
+ result.m_propertyDefs.push_back(CustomPropertyDefinition(propertyName, type));
+ break;
+ case QVariant::Invalid:
+ qCWarning(DESKTOPPARSER) << "Property type" << typeStr
+ << "is not a known QVariant type."
+ " Found while parsing property definition for"
+ << propertyName << "in" << path;
+ break;
+ default:
+ qCWarning(DESKTOPPARSER) << "Unsupported property type" << typeStr << "for property" << propertyName << "found in" << path
+ << "\nOnly QString, QStringList, int, double and bool are supported.";
+ }
+ }
+ return new ServiceTypeDefinition(result);
+}
+
+// a lazy map of service type definitions
+typedef QCache<QString /*path*/, ServiceTypeDefinition> ServiceTypesHash;
+Q_GLOBAL_STATIC(ServiceTypesHash, s_serviceTypes)
+// access must be guarded by serviceTypesMutex as this code could be executed by multiple threads
+QBasicMutex s_serviceTypesMutex;
+} // end of anonymous namespace
+
+ServiceTypeDefinitions ServiceTypeDefinitions::fromFiles(const QStringList &paths)
+{
+ ServiceTypeDefinitions ret;
+ ret.m_definitions.reserve(paths.size());
+ // as we might modify the cache we need to acquire a mutex here
+ for (const QString &serviceTypePath : paths) {
+ bool added = ret.addFile(serviceTypePath);
+ if (!added) {
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+ exit(1); // this is a fatal error when using kcoreaddons_desktop_to_json()
+#endif
+ }
+ }
+ return ret;
+}
+
+bool ServiceTypeDefinitions::addFile(const QString &path)
+{
+ QMutexLocker lock(&s_serviceTypesMutex);
+ ServiceTypeDefinition *def = s_serviceTypes->object(path);
+
+ if (def) {
+ // in cache but we still must make our own copy
+ m_definitions << *def;
+ } else {
+ // not found in cache -> we need to parse the file
+ qCDebug(DESKTOPPARSER) << "About to parse service type file" << path;
+ def = parseServiceTypesFile(path);
+ if (!def) {
+ return false;
+ }
+
+ m_definitions << *def; // This must *precede* insert call, insert might delete
+ s_serviceTypes->insert(path, def);
+ }
+ return true;
+}
+
+QJsonValue ServiceTypeDefinitions::parseValue(const QByteArray &key, const QString &value) const
+{
+ // check whether the key has a special type associated with it
+ for (const auto &def : m_definitions) {
+ for (const CustomPropertyDefinition &propertyDef : def.m_propertyDefs) {
+ if (propertyDef.key == key) {
+ return propertyDef.fromString(value);
+ }
+ }
+ }
+ qCDebug(DESKTOPPARSER) << "Unknown property type for key" << key << "-> falling back to string";
+ return QJsonValue(value);
+}
+
+bool ServiceTypeDefinitions::hasServiceType(const QByteArray &serviceTypeName) const
+{
+ const auto it = std::find_if(m_definitions.begin(), m_definitions.end(), [&serviceTypeName](const ServiceTypeDefinition &def) {
+ return def.m_serviceTypeName == serviceTypeName;
+ });
+ return it != m_definitions.end();
+}
+
+void DesktopFileParser::convertToJson(const QByteArray &key,
+ ServiceTypeDefinitions &serviceTypes,
+ const QString &value,
+ QJsonObject &json,
+ QJsonObject &kplugin,
+ int lineNr)
+{
+ /* The following keys are recognized (and added to a "KPlugin" object):
+
+ Icon=mypluginicon
+ Type=Service
+ ServiceTypes=KPluginInfo
+ MimeType=text/plain;image/png
+
+ Name=User Visible Name (translatable)
+ Comment=Description of what the plugin does (translatable)
+
+ X-KDE-PluginInfo-Author=Author's Name
+ X-KDE-PluginInfo-Email=author@foo.bar
+ # alternatively to X-KDE-PluginInfo-Author & X-KDE-PluginInfo-Email:
+ X-KDE-PluginInfo-Authors=Author A's Name;AuthorB's Name (since KF 5.77)
+ X-KDE-PluginInfo-Emails=authorA@foo.bar;authorB@foo.bar (since KF 5.77)
+ X-KDE-PluginInfo-Name=internalname
+ X-KDE-PluginInfo-Version=1.1
+ X-KDE-PluginInfo-Website=http://www.plugin.org/
+ X-KDE-PluginInfo-Category=playlist
+ X-KDE-PluginInfo-License=GPL
+ X-KDE-PluginInfo-Copyright=Copyright <year> by Author's Name (since KF 5.77, translatable)
+ X-KDE-PluginInfo-EnabledByDefault=true
+ X-KDE-FormFactors=desktop
+ */
+ if (key == QByteArrayLiteral("Icon")) {
+ kplugin[QStringLiteral("Icon")] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Name")) {
+ kplugin[QStringLiteral("Id")] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Category")) {
+ kplugin[QStringLiteral("Category")] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-License")) {
+ kplugin[QStringLiteral("License")] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Copyright")) {
+ kplugin[QStringLiteral("Copyright")] = value;
+ } else if (key.startsWith(QByteArrayLiteral("X-KDE-PluginInfo-Copyright["))) {
+ const QString languageSuffix = QString::fromUtf8(key.mid(qstrlen("X-KDE-PluginInfo-Copyright")));
+ kplugin[QStringLiteral("Copyright") + languageSuffix] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Version")) {
+ kplugin[QStringLiteral("Version")] = value;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Website")) {
+ kplugin[QStringLiteral("Website")] = value;
+ }
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 79)
+ else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Depends")) {
+ kplugin[QStringLiteral("Dependencies")] = QJsonArray::fromStringList(deserializeList(value));
+ qCDebug(DESKTOPPARSER) << "The X-KDE-PluginInfo-Depends property is deprecated and will be removed in KF6";
+ }
+#endif
+ else if (key == QByteArrayLiteral("X-KDE-ServiceTypes") || key == QByteArrayLiteral("ServiceTypes")) {
+ // NOTE: "X-KDE-ServiceTypes" and "ServiceTypes" were already managed in the first parse step, so this second one is almost a noop
+ const auto services = deserializeList(value);
+ kplugin[QStringLiteral("ServiceTypes")] = QJsonArray::fromStringList(services);
+ } else if (key == QByteArrayLiteral("MimeType")) {
+ // MimeType is a XDG string list and not a KConfig list so we need to use ';' as the separator
+ kplugin[QStringLiteral("MimeTypes")] = QJsonArray::fromStringList(deserializeList(value, ';'));
+ // make sure that applications using kcoreaddons_desktop_to_json() that depend on reading
+ // the MimeType property still work (see https://git.reviewboard.kde.org/r/125527/)
+ json[QStringLiteral("MimeType")] = value; // TODO KF6 remove this compatibility code
+ } else if (key == QByteArrayLiteral("X-KDE-FormFactors")) {
+ kplugin[QStringLiteral("FormFactors")] = QJsonArray::fromStringList(deserializeList(value));
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-EnabledByDefault")) {
+ bool boolValue = false;
+ // should only be lower case, but be tolerant here
+ if (value.toLower() == QLatin1String("true")) {
+ boolValue = true;
+ } else {
+ if (value.toLower() != QLatin1String("false")) {
+ qCWarning(DESKTOPPARSER).nospace() << "Expected boolean value for key \"" << key << "\" at line " << lineNr << "but got \"" << value
+ << "\" instead.";
+ }
+ }
+ kplugin[QStringLiteral("EnabledByDefault")] = boolValue;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Author")) {
+ QJsonObject authorsObject = kplugin.value(QStringLiteral("Authors")).toArray().at(0).toObject();
+ // if the authors object doesn't exist yet this will create it
+ authorsObject[QStringLiteral("Name")] = value;
+ QJsonArray array;
+ array.append(authorsObject);
+ kplugin[QStringLiteral("Authors")] = array;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Email")) {
+ QJsonObject authorsObject = kplugin.value(QStringLiteral("Authors")).toArray().at(0).toObject();
+ // if the authors object doesn't exist yet this will create it
+ authorsObject[QStringLiteral("Email")] = value;
+ QJsonArray array;
+ array.append(authorsObject);
+ kplugin[QStringLiteral("Authors")] = array;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Authors")) {
+ const auto authors = deserializeList(value);
+ QJsonArray oldArray = kplugin.value(QStringLiteral("Authors")).toArray();
+ QJsonArray newArray;
+ for (int i = 0; i < authors.size(); ++i) {
+ QJsonObject authorsObject = oldArray.at(i).toObject();
+ // if the authors object doesn't exist yet this will create it
+ authorsObject[QStringLiteral("Name")] = authors[i];
+ newArray.append(authorsObject);
+ }
+ kplugin[QStringLiteral("Authors")] = newArray;
+ } else if (key == QByteArrayLiteral("X-KDE-PluginInfo-Emails")) {
+ const auto emails = deserializeList(value);
+ QJsonArray oldArray = kplugin.value(QStringLiteral("Authors")).toArray();
+ QJsonArray newArray;
+ for (int i = 0; i < emails.size(); ++i) {
+ QJsonObject authorsObject = oldArray.at(i).toObject();
+ // if the authors object doesn't exist yet this will create it
+ authorsObject[QStringLiteral("Email")] = emails[i];
+ newArray.append(authorsObject);
+ }
+ kplugin[QStringLiteral("Authors")] = newArray;
+ } else if (key == QByteArrayLiteral("Name") || key.startsWith(QByteArrayLiteral("Name["))) {
+ // TODO: also handle GenericName? does that make any sense, or is X-KDE-PluginInfo-Category enough?
+ kplugin[QString::fromUtf8(key)] = value;
+ } else if (key == QByteArrayLiteral("Comment")) {
+ kplugin[QStringLiteral("Description")] = value;
+ } else if (key.startsWith(QByteArrayLiteral("Comment["))) {
+ kplugin[QStringLiteral("Description") + QString::fromUtf8(key.mid(qstrlen("Comment")))] = value;
+ } else if (key == QByteArrayLiteral("InitialPreference")) {
+ kplugin[QStringLiteral("InitialPreference")] = value.toInt();
+ } else if (key == QByteArrayLiteral("Hidden")) {
+ DESKTOPTOJSON_VERBOSE_WARNING << "Hidden= key found in desktop file, this makes no sense"
+ " with metadata inside the plugin.";
+ kplugin[QString::fromUtf8(key)] = (value.toLower() == QLatin1String("true"));
+ } else if (key == QByteArrayLiteral("Exec") || key == QByteArrayLiteral("Type") || key == QByteArrayLiteral("Actions")
+ || key == QByteArrayLiteral("X-KDE-Library") || key == QByteArrayLiteral("Encoding")) {
+ // Exec= doesn't make sense here, however some .desktop files (like e.g. in kdevelop) have a dummy value here
+ // also the Type=Service entry is no longer needed
+ // Actions= is used as hack at least with the Dolphin KPart to report the different view mode options
+ // no plans yet to port that hack to JSON, so gently ignore it for now
+ // X-KDE-Library is also not needed since we already have the library to read this metadata
+ // Encoding= is also not converted as we always use utf-8 for reading
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Not converting key " << key << "=" << value;
+ } else {
+ // check service type definitions or fall back to QString
+ json[QString::fromUtf8(key)] = serviceTypes.parseValue(key, value);
+ }
+}
+
+bool DesktopFileParser::convert(const QString &src, const QStringList &serviceTypes, QJsonObject &json, QString *libraryPath)
+{
+ QFile df(src);
+ int lineNr = 0;
+ ServiceTypeDefinitions serviceTypeDef = ServiceTypeDefinitions::fromFiles(serviceTypes);
+ readUntilDesktopEntryGroup(df, src, lineNr);
+ DESKTOPTOJSON_VERBOSE_DEBUG << "Found [Desktop Entry] group in line" << lineNr;
+ auto startPos = df.pos();
+
+ // parse it a first time to know servicetype
+ while (!df.atEnd()) {
+ QByteArray key;
+ QString value;
+ if (!tokenizeKeyValue(df, src, key, value, lineNr)) {
+ break;
+ }
+ // some .desktop files still use the legacy ServiceTypes= key
+ if (key == QByteArrayLiteral("X-KDE-ServiceTypes") || key == QByteArrayLiteral("ServiceTypes")) {
+ const QString dotDesktop = QStringLiteral(".desktop");
+ const QChar slashChar(QLatin1Char('/'));
+ const auto serviceList = deserializeList(value);
+
+ for (const auto &service : serviceList) {
+ if (!serviceTypeDef.hasServiceType(service.toLatin1())) {
+ // Make up the filename from the service type name. This assumes consistent naming...
+ QString absFileName = locateRelativeServiceType(service.toLower().replace(slashChar, QLatin1Char('-')) + dotDesktop);
+ if (absFileName.isEmpty()) {
+ absFileName = locateRelativeServiceType(service.toLower().remove(slashChar) + dotDesktop);
+ }
+ if (absFileName.isEmpty()) {
+ qCWarning(DESKTOPPARSER) << "Unable to find service type for service" << service << "listed in" << src;
+ } else {
+ serviceTypeDef.addFile(absFileName);
+ }
+ }
+ }
+ break;
+ }
+ }
+ lineNr = 0;
+ df.seek(startPos);
+
+ QJsonObject kplugin; // the "KPlugin" key of the metadata
+ while (!df.atEnd()) {
+ QByteArray key;
+ QString value;
+ if (!tokenizeKeyValue(df, src, key, value, lineNr)) {
+ break;
+ } else if (key.isEmpty()) {
+ continue;
+ }
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+ if (s_compatibilityMode) {
+ convertToCompatibilityJson(QString::fromUtf8(key), value, json, lineNr);
+ } else {
+ convertToJson(key, serviceTypeDef, value, json, kplugin, lineNr);
+ }
+#else
+ convertToJson(key, serviceTypeDef, value, json, kplugin, lineNr);
+#endif
+ if (libraryPath && key == QByteArrayLiteral("X-KDE-Library")) {
+ *libraryPath = value;
+ }
+ }
+ json[QStringLiteral("KPlugin")] = kplugin;
+ return true;
+}
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2013-2014 Sebastian Kügler <sebas@kde.org>
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#ifndef DESKTOPFILEPARSER_H
+#define DESKTOPFILEPARSER_H
+
+#include <QByteArray>
+#include <QVector>
+class QJsonObject;
+class QJsonValue;
+
+struct CustomPropertyDefinition;
+struct ServiceTypeDefinition {
+ QVector<CustomPropertyDefinition> m_propertyDefs;
+ QByteArray m_serviceTypeName;
+};
+
+struct ServiceTypeDefinitions {
+ static ServiceTypeDefinitions fromFiles(const QStringList &paths);
+ /**
+ * @return @p value converted to the correct JSON type.
+ * If there is no custom property definition for @p key this will simply return the string value
+ */
+ QJsonValue parseValue(const QByteArray &key, const QString &value) const;
+
+ /**
+ * Parses the service file in @p path and extracts its definitions
+ *
+ * @returns whether the action could be performed
+ */
+ bool addFile(const QString &path);
+
+ bool hasServiceType(const QByteArray &serviceTypeName) const;
+
+private:
+ QVector<ServiceTypeDefinition> m_definitions;
+};
+
+namespace DesktopFileParser
+{
+QByteArray escapeValue(const QByteArray &input);
+QStringList deserializeList(const QString &data, char separator = ',');
+bool convert(const QString &src, const QStringList &serviceTypes, QJsonObject &json, QString *libraryPath);
+void convertToJson(const QByteArray &key, ServiceTypeDefinitions &serviceTypes, const QString &value, QJsonObject &json, QJsonObject &kplugin, int lineNr);
+#ifdef BUILDING_DESKTOPTOJSON_TOOL
+void convertToCompatibilityJson(const QString &key, const QString &value, QJsonObject &json, int lineNr);
+extern bool s_verbose;
+extern bool s_compatibilityMode;
+#endif
+}
+
+#endif // DESKTOPFILEPARSER_H
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2007 Bernhard Loos <nhuh.put@web.de>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KEXPORTPLUGIN_H
+#define KEXPORTPLUGIN_H
+
+#include <QPluginLoader>
+#include <QtPlugin>
+#include <kcoreaddons_export.h>
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 84)
+/**
+ * \relates KPluginLoader
+ * Use this macro if you want to give your plugin a version number.
+ * You can later access the version number with KPluginLoader::pluginVersion()
+ * @deprecated Since 5.84, use @ref KPluginMetaData::version() or a versioned namespace instead
+ */
+#define K_EXPORT_PLUGIN_VERSION(version) Q_EXTERN_C Q_DECL_EXPORT const quint32 kde_plugin_version = version;
+#endif
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 0)
+/**
+ * \relates KPluginLoader
+ * This macro exports the main object of the plugin. Most times, this will be a KPluginFactory
+ * or derived class, but any QObject derived class can be used.
+ * Take a look at the documentation of Q_EXPORT_PLUGIN2 for some details.
+ */
+
+#if defined(Q_OS_WIN32) && defined(Q_CC_BOR)
+#define Q_STANDARD_CALL __stdcall
+#else
+#define Q_STANDARD_CALL
+
+class KCOREADDONS_DEPRECATED_EXPORT K_EXPORT_PLUGIN_is_deprecated_see_KDE5PORTING
+{
+};
+
+#define K_EXPORT_PLUGIN(factory) K_EXPORT_PLUGIN_is_deprecated_see_KDE5PORTING dummy;
+#endif
+
+#endif
+
+#endif // KEXPORTPLUGIN_H
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2007 Matthias Kretz <kretz@kde.org>
+ SPDX-FileCopyrightText: 2007 Bernhard Loos <nhuh.put@web.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kpluginfactory.h"
+#include "kpluginfactory_p.h"
+
+#include "kcoreaddons_debug.h"
+#include <QObjectCleanupHandler>
+
+Q_GLOBAL_STATIC(QObjectCleanupHandler, factorycleanup)
+
+KPluginFactory::KPluginFactory()
+ : d_ptr(new KPluginFactoryPrivate)
+{
+ factorycleanup()->add(this);
+}
+
+KPluginFactory::KPluginFactory(KPluginFactoryPrivate &d)
+ : d_ptr(&d)
+{
+ factorycleanup()->add(this);
+}
+
+KPluginFactory::~KPluginFactory() = default;
+
+KPluginMetaData KPluginFactory::metaData() const
+{
+ Q_D(const KPluginFactory);
+
+ return d->metaData;
+}
+
+void KPluginFactory::setMetaData(const KPluginMetaData &metaData)
+{
+ Q_D(KPluginFactory);
+ d->metaData = metaData;
+}
+
+void KPluginFactory::registerPlugin(const QString &keyword, const QMetaObject *metaObject, CreateInstanceFunction instanceFunction)
+{
+ Q_D(KPluginFactory);
+
+ Q_ASSERT(metaObject);
+
+ // we allow different interfaces to be registered without keyword
+ if (!keyword.isEmpty()) {
+ if (d->createInstanceHash.contains(keyword)) {
+ qCWarning(KCOREADDONS_DEBUG) << "A plugin with the keyword" << keyword << "was already registered. A keyword must be unique!";
+ }
+ d->createInstanceHash.insert(keyword, KPluginFactoryPrivate::Plugin(metaObject, instanceFunction));
+ } else {
+ const QList<KPluginFactoryPrivate::Plugin> clashes(d->createInstanceHash.values(keyword));
+ const QMetaObject *superClass = metaObject->superClass();
+ if (superClass) {
+ for (const KPluginFactoryPrivate::Plugin &plugin : clashes) {
+ for (const QMetaObject *otherSuper = plugin.first->superClass(); otherSuper; otherSuper = otherSuper->superClass()) {
+ if (superClass == otherSuper) {
+ qCWarning(KCOREADDONS_DEBUG) << "Two plugins with the same interface(" << superClass->className()
+ << ") were registered. Use keywords to identify the plugins.";
+ }
+ }
+ }
+ }
+ for (const KPluginFactoryPrivate::Plugin &plugin : clashes) {
+ superClass = plugin.first->superClass();
+ if (superClass) {
+ for (const QMetaObject *otherSuper = metaObject->superClass(); otherSuper; otherSuper = otherSuper->superClass()) {
+ if (superClass == otherSuper) {
+ qCWarning(KCOREADDONS_DEBUG) << "Two plugins with the same interface(" << superClass->className()
+ << ") were registered. Use keywords to identify the plugins.";
+ }
+ }
+ }
+ }
+ d->createInstanceHash.insert(keyword, KPluginFactoryPrivate::Plugin(metaObject, instanceFunction));
+ }
+}
+
+void KPluginFactory::registerPlugin(const QString &keyword, const QMetaObject *metaObject, CreateInstanceWithMetaDataFunction instanceFunction)
+{
+ Q_D(KPluginFactory);
+
+ Q_ASSERT(metaObject);
+
+ // we allow different interfaces to be registered without keyword
+ if (!keyword.isEmpty()) {
+ if (d->createInstanceWithMetaDataHash.contains(keyword)) {
+ qCWarning(KCOREADDONS_DEBUG) << "A plugin with the keyword" << keyword << "was already registered. A keyword must be unique!";
+ }
+ d->createInstanceWithMetaDataHash.insert(keyword, {metaObject, instanceFunction});
+ } else {
+ const QList<KPluginFactoryPrivate::PluginWithMetadata> clashes(d->createInstanceWithMetaDataHash.values(keyword));
+ const QMetaObject *superClass = metaObject->superClass();
+ if (superClass) {
+ for (const KPluginFactoryPrivate::PluginWithMetadata &plugin : clashes) {
+ for (const QMetaObject *otherSuper = plugin.first->superClass(); otherSuper; otherSuper = otherSuper->superClass()) {
+ if (superClass == otherSuper) {
+ qCWarning(KCOREADDONS_DEBUG) << "Two plugins with the same interface(" << superClass->className()
+ << ") were registered. Use keywords to identify the plugins.";
+ }
+ }
+ }
+ }
+ for (const KPluginFactoryPrivate::PluginWithMetadata &plugin : clashes) {
+ superClass = plugin.first->superClass();
+ if (superClass) {
+ for (const QMetaObject *otherSuper = metaObject->superClass(); otherSuper; otherSuper = otherSuper->superClass()) {
+ if (superClass == otherSuper) {
+ qCWarning(KCOREADDONS_DEBUG) << "Two plugins with the same interface(" << superClass->className()
+ << ") were registered. Use keywords to identify the plugins.";
+ }
+ }
+ }
+ }
+ d->createInstanceWithMetaDataHash.insert(keyword, {metaObject, instanceFunction});
+ }
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(4, 0)
+QObject *KPluginFactory::createObject(QObject *parent, const char *className, const QStringList &args)
+{
+ Q_UNUSED(parent);
+ Q_UNUSED(className);
+ Q_UNUSED(args);
+ return nullptr;
+}
+#endif
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(4, 0)
+KParts::Part *KPluginFactory::createPartObject(QWidget *parentWidget, QObject *parent, const char *classname, const QStringList &args)
+{
+ Q_UNUSED(parent);
+ Q_UNUSED(parentWidget);
+ Q_UNUSED(classname);
+ Q_UNUSED(args);
+ return nullptr;
+}
+#endif
+
+QObject *KPluginFactory::create(const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword)
+{
+ Q_D(KPluginFactory);
+
+ QObject *obj = nullptr;
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(4, 0)
+ if (keyword.isEmpty()) {
+ const QStringList argsStringList = variantListToStringList(args);
+
+ if ((obj = reinterpret_cast<QObject *>(createPartObject(parentWidget, parent, iface, argsStringList)))) {
+ Q_EMIT objectCreated(obj);
+ return obj;
+ }
+
+ if ((obj = createObject(parent, iface, argsStringList))) {
+ Q_EMIT objectCreated(obj);
+ return obj;
+ }
+ }
+#endif
+
+ const QList<KPluginFactoryPrivate::Plugin> candidates(d->createInstanceHash.values(keyword));
+ // for !keyword.isEmpty() candidates.count() is 0 or 1
+
+ for (const KPluginFactoryPrivate::Plugin &plugin : candidates) {
+ for (const QMetaObject *current = plugin.first; current; current = current->superClass()) {
+ if (0 == qstrcmp(iface, current->className())) {
+ if (obj) {
+ qCWarning(KCOREADDONS_DEBUG) << "ambiguous interface requested from a DSO containing more than one plugin";
+ }
+ obj = plugin.second(parentWidget, parent, args);
+ break;
+ }
+ }
+ }
+
+ if (!obj) {
+ const QList<KPluginFactoryPrivate::PluginWithMetadata> candidates = (d->createInstanceWithMetaDataHash.values(keyword));
+ // for !keyword.isEmpty() candidates.count() is 0 or 1
+
+ for (const KPluginFactoryPrivate::PluginWithMetadata &plugin : candidates) {
+ for (const QMetaObject *current = plugin.first; current; current = current->superClass()) {
+ if (0 == qstrcmp(iface, current->className())) {
+ if (obj) {
+ qCWarning(KCOREADDONS_DEBUG) << "ambiguous interface requested from a DSO containing more than one plugin";
+ }
+ obj = plugin.second(parentWidget, parent, d->metaData, args);
+ break;
+ }
+ }
+ }
+ }
+
+ if (obj) {
+ Q_EMIT objectCreated(obj);
+ }
+ return obj;
+}
+
+QStringList KPluginFactory::variantListToStringList(const QVariantList &list)
+{
+ QStringList stringlist;
+ for (const QVariant &var : list) {
+ stringlist << var.toString();
+ }
+ return stringlist;
+}
+
+QVariantList KPluginFactory::stringListToVariantList(const QStringList &list)
+{
+ QVariantList variantlist;
+ for (const QString &str : list) {
+ variantlist << QVariant(str);
+ }
+ return variantlist;
+}
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2007 Matthias Kretz <kretz@kde.org>
+ SPDX-FileCopyrightText: 2007 Bernhard Loos <nhuh.put@web.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KPLUGINFACTORY_H
+#define KPLUGINFACTORY_H
+
+#include "kcoreaddons_export.h"
+
+#include <QObject>
+#include <QStringList>
+#include <QVariant>
+#include <kexportplugin.h> // for source compat
+
+#include <memory>
+#include <type_traits>
+
+class QWidget;
+
+class KPluginFactoryPrivate;
+namespace KParts
+{
+class Part;
+}
+class KPluginMetaData;
+
+#define KPluginFactory_iid "org.kde.KPluginFactory"
+
+/**
+ * @relates KPluginFactory
+ *
+ * Declare a KPluginFactory subclass of the given base factory.
+ *
+ * @param name the name of the KPluginFactory derived class.
+ *
+ * @param baseFactory the name of the base class (base factory) to use.
+ * This must be a KPluginFactory subclass with
+ * a default constructor.
+ *
+ * Additional parameters may be additional Qt properties, such as
+ * Q_PLUGIN_METADATA.
+ *
+ * @note The base factory must be a subclass of KPluginFactory.
+ * While this macro is largely an implementation detail, factories
+ * that have a different create() interface can be declared through
+ * this macro. Normal use through other K_PLUGIN_FACTORY macros
+ * uses KPluginFactory as a base.
+ *
+ * @note This macro is usually only an implementation detail
+ * for K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY or
+ * K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_JSON .
+ *
+ * @since 5.80
+ *
+ */
+#define K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_SKEL(name, baseFactory, ...) \
+ class name : public baseFactory \
+ { \
+ Q_OBJECT \
+ Q_INTERFACES(KPluginFactory) \
+ __VA_ARGS__ \
+ public: \
+ explicit name(); \
+ ~name(); \
+ };
+
+#define K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_JSON(name, baseFactory, json) \
+ K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_SKEL(name, baseFactory, Q_PLUGIN_METADATA(IID KPluginFactory_iid FILE json))
+
+#define K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY(name, baseFactory) \
+ K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_SKEL(name, baseFactory, Q_PLUGIN_METADATA(IID KPluginFactory_iid))
+
+#define K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, baseFactory, pluginRegistrations) \
+ name::name(){pluginRegistrations} name::~name() \
+ { \
+ }
+
+#define K_PLUGIN_FACTORY_WITH_BASEFACTORY(name, baseFactory, pluginRegistrations) \
+ K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY(name, baseFactory) \
+ K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, baseFactory, pluginRegistrations)
+
+#define K_PLUGIN_FACTORY_WITH_BASEFACTORY_JSON(name, baseFactory, jsonFile, pluginRegistrations) \
+ K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_JSON(name, baseFactory, jsonFile) \
+ K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, baseFactory, pluginRegistrations)
+
+/**
+ * @relates KPluginFactory
+ *
+ * Create a KPluginFactory subclass and export it as the root plugin object.
+ *
+ * @param name the name of the KPluginFactory derived class.
+ *
+ * @param pluginRegistrations code to be inserted into the constructor of the
+ * class. Usually a series of registerPlugin() calls.
+ *
+ * @note K_PLUGIN_FACTORY declares the subclass including a Q_OBJECT macro.
+ * So you need to make sure to have Qt's moc run also for the source file
+ * where you use the macro. E.g. in projects using CMake and it's automoc feature,
+ * as usual you need to have a line
+ * @code
+ * #include <myplugin.moc>
+ * @endcode
+ * in the same source file when that one has the name "myplugin.cpp".
+ *
+ * Example:
+ * @code
+ * #include <KPluginFactory>
+ * #include <plugininterface.h>
+ *
+ * class MyPlugin : public PluginInterface
+ * {
+ * public:
+ * MyPlugin(QObject *parent, const QVariantList &args)
+ * : PluginInterface(parent)
+ * {}
+ * };
+ *
+ * K_PLUGIN_FACTORY(MyPluginFactory,
+ * registerPlugin<MyPlugin>();
+ * )
+ *
+ * #include <myplugin.moc>
+ * @endcode
+ *
+ * If you want to compile a .json file into the plugin, use K_PLUGIN_FACTORY_WITH_JSON.
+ *
+ * @see K_PLUGIN_FACTORY_WITH_JSON
+ * @see K_PLUGIN_FACTORY_DECLARATION
+ * @see K_PLUGIN_FACTORY_DEFINITION
+ */
+#define K_PLUGIN_FACTORY(name, pluginRegistrations) K_PLUGIN_FACTORY_WITH_BASEFACTORY(name, KPluginFactory, pluginRegistrations)
+
+/**
+ * @relates KPluginFactory
+ *
+ * Create a KPluginFactory subclass and export it as the root plugin object with
+ * JSON metadata.
+ *
+ * This macro does the same as K_PLUGIN_FACTORY, but adds a JSON file as plugin
+ * metadata. See Q_PLUGIN_METADATA() for more information.
+ *
+ * @param name the name of the KPluginFactory derived class.
+ *
+ * @param pluginRegistrations code to be inserted into the constructor of the
+ * class. Usually a series of registerPlugin() calls.
+ *
+ * @param jsonFile name of the JSON file to be compiled into the plugin as metadata
+ *
+ * @note K_PLUGIN_FACTORY_WITH_JSON declares the subclass including a Q_OBJECT macro.
+ * So you need to make sure to have Qt's moc run also for the source file
+ * where you use the macro. E.g. in projects using CMake and its automoc feature,
+ * as usual you need to have a line
+ * @code
+ * #include <myplugin.moc>
+ * @endcode
+ * in the same source file when that one has the name "myplugin.cpp".
+ *
+ * Example (KF >= 5.77):
+ * @code
+ * #include <KPluginFactory>
+ * #include <plugininterface.h>
+ *
+ * class MyPlugin : public PluginInterface
+ * {
+ * public:
+ * MyPlugin(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args)
+ * : PluginInterface(parent)
+ * {}
+ * };
+ *
+ * K_PLUGIN_FACTORY_WITH_JSON(MyPluginFactory,
+ * "metadata.json",
+ * registerPlugin<MyPlugin>();
+ * )
+ *
+ * #include <myplugin.moc>
+ * @endcode
+ *
+ * Example (backward-compatible with KF < 5.77):
+ * @code
+ * #include <KPluginFactory>
+ * #include <plugininterface.h>
+ *
+ * class MyPlugin : public PluginInterface
+ * {
+ * public:
+ * MyPlugin(QObject *parent, const QVariantList &args)
+ * : PluginInterface(parent)
+ * {}
+ * };
+ *
+ * K_PLUGIN_FACTORY_WITH_JSON(MyPluginFactory,
+ * "metadata.json",
+ * registerPlugin<MyPlugin>();
+ * )
+ *
+ * #include <myplugin.moc>
+ * @endcode
+ *
+ * @see K_PLUGIN_FACTORY
+ * @see K_PLUGIN_FACTORY_DECLARATION
+ * @see K_PLUGIN_FACTORY_DEFINITION
+ *
+ * @since 5.0
+ */
+#define K_PLUGIN_FACTORY_WITH_JSON(name, jsonFile, pluginRegistrations) \
+ K_PLUGIN_FACTORY_WITH_BASEFACTORY_JSON(name, KPluginFactory, jsonFile, pluginRegistrations)
+
+/**
+ * @relates KPluginFactory
+ *
+ * Create a KPluginFactory subclass and export it as the root plugin object with
+ * JSON metadata.
+ *
+ * This macro does the same as K_PLUGIN_FACTORY_WITH_JSON, but you only have to pass the class name and the json file.
+ * The factory name and registerPlugin call are deduced from the class name.
+ *
+ * @code
+ * #include <myplugin.moc>
+ * @endcode
+ * in the same source file when that one has the name "myplugin.cpp".
+ *
+ * Example (KF >= 5.77):
+ * @code
+ * #include <KPluginFactory>
+ * #include <plugininterface.h>
+ *
+ * class MyPlugin : public PluginInterface
+ * {
+ * public:
+ * MyPlugin(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args)
+ * : PluginInterface(parent)
+ * {}
+ * };
+ *
+ * K_PLUGIN_CLASS_WITH_JSON(MyPlugin, "metadata.json")
+ *
+ * #include <myplugin.moc>
+ * @endcode
+ *
+ * Example (backward-compatible with KF < 5.77):
+ * @code
+ * #include <KPluginFactory>
+ * #include <plugininterface.h>
+ *
+ * class MyPlugin : public PluginInterface
+ * {
+ * public:
+ * MyPlugin(QObject *parent, const QVariantList &args)
+ * : PluginInterface(parent)
+ * {}
+ * };
+ *
+ * K_PLUGIN_CLASS_WITH_JSON(MyPlugin, "metadata.json")
+ *
+ * #include <myplugin.moc>
+ * @endcode
+ *
+ * @see K_PLUGIN_FACTORY_WITH_JSON
+ *
+ * @since 5.44
+ */
+#define K_PLUGIN_CLASS_WITH_JSON(classname, jsonFile) K_PLUGIN_FACTORY_WITH_JSON(classname##Factory, jsonFile, registerPlugin<classname>();)
+
+/**
+ * @relates KPluginFactory
+ *
+ * K_PLUGIN_FACTORY_DECLARATION declares the KPluginFactory subclass. This macro
+ * can be used in a header file.
+ *
+ * @param name the name of the KPluginFactory derived class.
+ *
+ * @see K_PLUGIN_FACTORY
+ * @see K_PLUGIN_FACTORY_DEFINITION
+ */
+#define K_PLUGIN_FACTORY_DECLARATION(name) K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY(name, KPluginFactory)
+
+/**
+ * @relates KPluginFactory
+ * K_PLUGIN_FACTORY_DEFINITION defines the KPluginFactory subclass. This macro
+ * can <b>not</b> be used in a header file.
+ *
+ * @param name the name of the KPluginFactory derived class.
+ *
+ * @param pluginRegistrations code to be inserted into the constructor of the
+ * class. Usually a series of registerPlugin() calls.
+ *
+ * @see K_PLUGIN_FACTORY
+ * @see K_PLUGIN_FACTORY_DECLARATION
+ */
+#define K_PLUGIN_FACTORY_DEFINITION(name, pluginRegistrations) K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, KPluginFactory, pluginRegistrations)
+
+/**
+ * @class KPluginFactory kpluginfactory.h <KPluginFactory>
+ *
+ * KPluginFactory provides a convenient way to provide factory-style plugins.
+ * Qt plugins provide a singleton object, but a common pattern is for plugins
+ * to generate as many objects of a particular type as the application requires.
+ * By using KPluginFactory, you can avoid implementing the factory pattern
+ * yourself.
+ *
+ * KPluginFactory also allows plugins to provide multiple different object
+ * types, indexed by keywords.
+ *
+ * The objects created by KPluginFactory must inherit QObject, and must have a
+ * standard constructor pattern:
+ * @li if the object is a KPart::Part, it must be of the form
+ * @code
+ * T(QWidget *parentWidget, QObject *parent, const QVariantList &args)
+ * @endcode
+ * or, since KF 5.77,
+ * @code
+ * T(QWidget *parentWidget, QObject *parent, const KPluginMetaData &metaData, const QVariantList &args)
+ * @endcode
+ * @li if it is a QWidget, it must be of the form
+ * @code
+ * T(QWidget *parent, const QVariantList &args)
+ * @endcode
+ * or, since KF 5.77,
+ * @code
+ * T(QWidget *parent, const KPluginMetaData &metaData, const QVariantList &args)
+ * @endcode
+ * @li otherwise it must be of the form
+ * @code
+ * T(QObject *parent, const QVariantList &args)
+ * @endcode
+ * or, since KF 5.77,
+ * @code
+ * T(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args)
+ * @endcode
+ *
+ * You should typically use either K_PLUGIN_FACTORY() or
+ * K_PLUGIN_FACTORY_WITH_JSON() in your plugin code to create the factory. The
+ * typical pattern is
+ *
+ * @code
+ * #include <KPluginFactory>
+ * #include <plugininterface.h>
+ *
+ * class MyPlugin : public PluginInterface
+ * {
+ * public:
+ * MyPlugin(QObject *parent, const QVariantList &args)
+ * : PluginInterface(parent)
+ * {}
+ * };
+ *
+ * K_PLUGIN_FACTORY(MyPluginFactory,
+ * registerPlugin<MyPlugin>();
+ * )
+ * #include <myplugin.moc>
+ * @endcode
+ *
+ * If you want to write a custom KPluginFactory not using the standard macro(s)
+ * you can reimplement the
+ * create(const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword)
+ * method.
+ *
+ * Example:
+ * @code
+ * class SomeScriptLanguageFactory : public KPluginFactory
+ * {
+ * Q_OBJECT
+ * public:
+ * SomeScriptLanguageFactory()
+ * {}
+ *
+ * protected:
+ * virtual QObject *create(const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword)
+ * {
+ * const QString identifier = QLatin1String(iface) + QLatin1Char('_') + keyword;
+ * // load scripting language module from the information in identifier
+ * // and return it:
+ * return object;
+ * }
+ * };
+ * @endcode
+ *
+ * To use such a custom KPluginFactory, use the K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY
+ * and K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY macros, passing in the
+ * name of the custom subclass as @p baseFactory .
+ *
+ * If you want to load a library use KPluginLoader.
+ * The application that wants to instantiate plugin classes can do the following:
+ * @code
+ * KPluginFactory *factory = KPluginLoader("libraryname").factory();
+ * if (factory) {
+ * PluginInterface *p1 = factory->create<PluginInterface>(parent);
+ * OtherInterface *p2 = factory->create<OtherInterface>(parent);
+ * NextInterface *p3 = factory->create<NextInterface>("keyword1", parent);
+ * NextInterface *p3 = factory->create<NextInterface>("keyword2", parent);
+ * }
+ * @endcode
+ *
+ * @author Matthias Kretz <kretz@kde.org>
+ * @author Bernhard Loos <nhuh.put@web.de>
+ */
+class KCOREADDONS_EXPORT KPluginFactory : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(KPluginFactory)
+public:
+ /**
+ * This constructor creates a factory for a plugin.
+ */
+ explicit KPluginFactory();
+
+ /**
+ * This destroys the PluginFactory.
+ */
+ ~KPluginFactory() override;
+
+ /**
+ * Use this method to create an object. It will try to create an object which inherits
+ * @p T. If it has multiple choices it's not defined which object will be returned, so be careful
+ * to request a unique interface or use keywords.
+ *
+ * @tparam T the interface for which an object should be created. The object will inherit @p T.
+ * @param parent the parent of the object. If @p parent is a widget type, it will also passed
+ * to the parentWidget argument of the CreateInstanceFunction for the object.
+ * @param args additional arguments which will be passed to the object.
+ * @returns pointer to the created object is returned, or @c nullptr if an error occurred.
+ */
+ template<typename T>
+ T *create(QObject *parent = nullptr, const QVariantList &args = QVariantList());
+
+ /**
+ * Use this method to create an object. It will try to create an object which inherits
+ * @p T and was registered with @p keyword.
+ *
+ * @tparam T the interface for which an object should be created. The object will inherit @p T.
+ * @param keyword the keyword of the object.
+ * @param parent the parent of the object. If @p parent is a widget type, it will also passed
+ * to the parentWidget argument of the CreateInstanceFunction for the object.
+ * @param args additional arguments which will be passed to the object.
+ * @returns pointer to the created object is returned, or @c nullptr if an error occurred.
+ */
+ template<typename T>
+ T *create(const QString &keyword, QObject *parent = nullptr, const QVariantList &args = QVariantList());
+
+ /**
+ * Use this method to create an object. It will try to create an object which inherits
+ * @p T and was registered with @p keyword.
+ * This overload has an additional @p parentWidget argument, which is used by some plugins (e.g. Parts).
+
+ * @tparam T the interface for which an object should be created. The object will inherit @p T.
+ * @param parentWidget an additional parent widget.
+ * @param parent the parent of the object. If @p parent is a widget type, it will also passed
+ * to the parentWidget argument of the CreateInstanceFunction for the object.
+ * @param keyword the keyword of the object.
+ * @param args additional arguments which will be passed to the object.
+ * @returns pointer to the created object is returned, or @c nullptr if an error occurred.
+ */
+ template<typename T>
+ T *create(QWidget *parentWidget, QObject *parent, const QString &keyword = QString(), const QVariantList &args = QVariantList());
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(4, 0)
+ /**
+ * @deprecated since 4.0 use create<T>(QObject *parent, const QVariantList &args)
+ */
+ template<typename T>
+ KCOREADDONS_DEPRECATED_VERSION(4, 0, "Use KPluginFactory::create<T>(QObject *parent, const QVariantList &args)")
+ T *create(QObject *parent, const QStringList &args)
+ {
+ return create<T>(parent, stringListToVariantList(args));
+ }
+
+ /**
+ * @deprecated since 4.0 use create<T>(QObject *parent, const QVariantList &args)
+ */
+ KCOREADDONS_DEPRECATED_VERSION(4, 0, "Use KPluginFactory::create<T>(QObject *parent, const QVariantList &args)")
+ QObject *create(QObject *parent = nullptr, const char *classname = "QObject", const QStringList &args = QStringList())
+ {
+ return create(classname, nullptr, parent, stringListToVariantList(args), QString());
+ }
+#endif
+
+ /**
+ * @returns the metadata of the plugin
+ *
+ * @since 5.77
+ */
+ KPluginMetaData metaData() const;
+
+ /**
+ * Set the metadata about the plugin this factory generates.
+ *
+ * @param metaData the metadata about the plugin
+ *
+ * @since 5.77
+ */
+ void setMetaData(const KPluginMetaData &metaData);
+
+ /**
+ * @internal
+ * Converts a QStringList to a QVariantList
+ */
+ static QVariantList stringListToVariantList(const QStringList &list);
+
+ /**
+ * @internal
+ * Converts a QVariantList of strings to a QStringList
+ */
+ static QStringList variantListToStringList(const QVariantList &list);
+
+Q_SIGNALS:
+ void objectCreated(QObject *object);
+
+protected:
+ /**
+ * Function pointer type to a function that instantiates a plugin.
+ */
+ typedef QObject *(*CreateInstanceFunction)(QWidget *, QObject *, const QVariantList &);
+
+ /**
+ * This is used to detect the arguments need for the constructor of metadata-less plugin classes.
+ * You can inherit it, if you want to add new classes and still keep support for the old ones.
+ */
+ template<class impl>
+ struct InheritanceChecker {
+ /// property to control the availability of the registerPlugin overload taking default values
+ static constexpr bool enabled = std::is_constructible<impl, QWidget *, QObject *, const QVariantList &>::value
+ || std::is_constructible<impl, QWidget *, const QVariantList &>::value || std::is_constructible<impl, QObject *, const QVariantList &>::value;
+
+ CreateInstanceFunction createInstanceFunction(KParts::Part *)
+ {
+ return &createPartInstance<impl>;
+ }
+ CreateInstanceFunction createInstanceFunction(QWidget *)
+ {
+ return &createInstance<impl, QWidget>;
+ }
+ CreateInstanceFunction createInstanceFunction(...)
+ {
+ return &createInstance<impl, QObject>;
+ }
+ };
+
+ /**
+ * Function pointer type to a function that instantiates a plugin, also taking a plugin metadata argument.
+ * @since 5.77
+ */
+ using CreateInstanceWithMetaDataFunction = QObject *(*)(QWidget *, QObject *, const KPluginMetaData &, const QVariantList &);
+
+ /**
+ * This is used to detect the arguments need for the constructor of metadata-taking plugin classes.
+ * You can inherit it, if you want to add new classes and still keep support for the old ones.
+ */
+ template<class impl>
+ struct InheritanceWithMetaDataChecker {
+ /// property to control the availability of the registerPlugin overload taking default values
+ static constexpr bool enabled = std::is_constructible<impl, QWidget *, QObject *, const KPluginMetaData &, const QVariantList &>::value
+ || std::is_constructible<impl, QWidget *, const KPluginMetaData &, const QVariantList &>::value
+ || std::is_constructible<impl, QObject *, const KPluginMetaData &, const QVariantList &>::value;
+
+ CreateInstanceWithMetaDataFunction createInstanceFunction(KParts::Part *)
+ {
+ return &createPartWithMetaDataInstance<impl>;
+ }
+ CreateInstanceWithMetaDataFunction createInstanceFunction(QWidget *)
+ {
+ return &createWithMetaDataInstance<impl, QWidget>;
+ }
+ CreateInstanceWithMetaDataFunction createInstanceFunction(...)
+ {
+ return &createWithMetaDataInstance<impl, QObject>;
+ }
+ };
+
+ explicit KPluginFactory(KPluginFactoryPrivate &dd);
+
+ // Use std::enable_if_t once C++14 can be relied on
+ template<bool B, class T = void>
+ using enable_if_t = typename std::enable_if<B, T>::type;
+
+ /**
+ * Registers a metadata-less plugin with the factory. Call this function from the constructor of the
+ * KPluginFactory subclass to make the create function able to instantiate the plugin when asked
+ * for an interface the plugin implements.
+ *
+ * You can register as many plugin classes as you want as long as either the plugin interface or
+ * the @p keyword makes it unique. E.g. it is possible to register a KCModule and a
+ * KParts::Part without having to specify keywords since their interfaces differ.
+ *
+ * @tparam T the name of the plugin class
+ *
+ * @param keyword an optional keyword as unique identifier for the plugin. This allows you to
+ * put more than one plugin with the same interface into the same library using the same
+ * factory. X-KDE-PluginKeyword is a convenient way to specify the keyword in a desktop file.
+ *
+ * @param instanceFunction A function pointer to a function that creates an instance of the
+ * plugin.
+ */
+ template<class T>
+ void registerPlugin(const QString &keyword, CreateInstanceFunction instanceFunction)
+ {
+ registerPlugin(keyword, &T::staticMetaObject, instanceFunction);
+ }
+
+ /**
+ * Overload for registerPlugin<T>(const QString &keyword, CreateInstanceFunction instanceFunction)
+ *
+ * Uses a default instance creation function depending on the type of interface. If the
+ * interface inherits from
+ * @li @c KParts::Part the function will call
+ * @code
+ * new T(QWidget *parentWidget, QObject *parent, const QVariantList &args)
+ * @endcode
+ * @li @c QWidget the function will call
+ * @code
+ * new T(QWidget *parent, const QVariantList &args)
+ * @endcode
+ * @li else the function will call
+ * @code
+ * new T(QObject *parent, const QVariantList &args)
+ * @endcode
+ *
+ * If those constructor methods are not callable this overload is not available.
+ */
+ template<class T, enable_if_t<InheritanceChecker<T>::enabled, int> = 0>
+ void registerPlugin(const QString &keyword = QString())
+ {
+ CreateInstanceFunction instanceFunction = InheritanceChecker<T>().createInstanceFunction(static_cast<T *>(nullptr));
+ registerPlugin<T>(keyword, instanceFunction);
+ }
+
+ /**
+ * Registers a metadata-taking plugin with the factory. Call this function from the constructor of the
+ * KPluginFactory subclass to make the create function able to instantiate the plugin when asked
+ * for an interface the plugin implements.
+ *
+ * You can register as many plugin classes as you want as long as either the plugin interface or
+ * the @p keyword makes it unique. E.g. it is possible to register a KCModule and a
+ * KParts::Part without having to specify keywords since their interfaces differ.
+ *
+ * @tparam T the name of the plugin class
+ *
+ * @param keyword An optional keyword as unique identifier for the plugin. This allows you to
+ * put more than one plugin with the same interface into the same library using the same
+ * factory. X-KDE-PluginKeyword is a convenient way to specify the keyword in a desktop file.
+ *
+ * @param instanceFunction A function pointer to a function that creates an instance of the
+ * plugin.
+ */
+ template<class T>
+ void registerPlugin(const QString &keyword, CreateInstanceWithMetaDataFunction instanceFunction)
+ {
+ registerPlugin(keyword, &T::staticMetaObject, instanceFunction);
+ }
+
+ /**
+ * Overload for registerPlugin<T>(const QString &keyword, CreateInstanceWithMetaDataFunction instanceFunction)
+ *
+ * Uses a default instance creation function depending on the type of interface. If the
+ * interface inherits from
+ * @li @c KParts::Part the function will call
+ * @code
+ * new T(QWidget *parentWidget, QObject *parent, const KPluginMetaData &metaData, const QVariantList &args)
+ * @endcode
+ * @li @c QWidget the function will call
+ * @code
+ * new T(QWidget *parent, const KPluginMetaData &metaData, const QVariantList &args)
+ * @endcode
+ * @li else the function will call
+ * @code
+ * new T(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args)
+ * @endcode
+ *
+ * If those constructor methods are not callable this overload is not available.
+ */
+ template<class T, enable_if_t<InheritanceWithMetaDataChecker<T>::enabled, int> = 0>
+ void registerPlugin(const QString &keyword = QString())
+ {
+ CreateInstanceWithMetaDataFunction instanceFunction = InheritanceWithMetaDataChecker<T>().createInstanceFunction(static_cast<T *>(nullptr));
+ registerPlugin<T>(keyword, instanceFunction);
+ }
+
+ std::unique_ptr<KPluginFactoryPrivate> const d_ptr;
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(4, 0)
+ /**
+ * @deprecated since 4.0 use create<T>(QObject *parent, const QVariantList &args)
+ */
+ KCOREADDONS_DEPRECATED_VERSION(4, 0, "Use KPluginFactory::create<T>(QObject *parent, const QVariantList &args)")
+ virtual QObject *createObject(QObject *parent, const char *className, const QStringList &args);
+
+ /**
+ * @deprecated since 4.0 use create<T>(QWidget *parentWidget, QObject *parent, const QString &keyword, const QVariantList &args)
+ */
+ KCOREADDONS_DEPRECATED_VERSION(4,
+ 0,
+ "Use KPluginFactory::create<T>(QWidget *parentWidget, QObject *parent, const QString &keyword, const QVariantList &args)")
+ virtual KParts::Part *createPartObject(QWidget *parentWidget, QObject *parent, const char *classname, const QStringList &args);
+#endif
+
+ /**
+ * This function is called when the factory asked to create an Object.
+ *
+ * You may reimplement it to provide a very flexible factory. This is especially useful to
+ * provide generic factories for plugins implemented using a scripting language.
+ *
+ * @param iface the staticMetaObject::className() string identifying the plugin interface that
+ * was requested. E.g. for KCModule plugins this string will be "KCModule".
+ * @param parentWidget only used if the requested plugin is a KPart.
+ * @param parent the parent object for the plugin object.
+ * @param args a plugin specific list of arbitrary arguments.
+ * @param keyword a string that uniquely identifies the plugin. If a KService is used this
+ * keyword is read from the X-KDE-PluginKeyword entry in the .desktop file.
+ */
+ virtual QObject *create(const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword);
+
+ template<class impl, class ParentType>
+ static QObject *createInstance(QWidget *parentWidget, QObject *parent, const QVariantList &args)
+ {
+ Q_UNUSED(parentWidget)
+ ParentType *p = nullptr;
+ if (parent) {
+ p = qobject_cast<ParentType *>(parent);
+ Q_ASSERT(p);
+ }
+ return new impl(p, args);
+ }
+
+ template<class impl>
+ static QObject *createPartInstance(QWidget *parentWidget, QObject *parent, const QVariantList &args)
+ {
+ return new impl(parentWidget, parent, args);
+ }
+
+ template<class impl, class ParentType>
+ static QObject *createWithMetaDataInstance(QWidget *parentWidget, QObject *parent, const KPluginMetaData &metaData, const QVariantList &args)
+ {
+ Q_UNUSED(parentWidget)
+ ParentType *p = nullptr;
+ if (parent) {
+ p = qobject_cast<ParentType *>(parent);
+ Q_ASSERT(p);
+ }
+ return new impl(p, metaData, args);
+ }
+
+ template<class impl>
+ static QObject *createPartWithMetaDataInstance(QWidget *parentWidget, QObject *parent, const KPluginMetaData &metaData, const QVariantList &args)
+ {
+ return new impl(parentWidget, parent, metaData, args);
+ }
+
+private:
+ void registerPlugin(const QString &keyword, const QMetaObject *metaObject, CreateInstanceFunction instanceFunction);
+ void registerPlugin(const QString &keyword, const QMetaObject *metaObject, CreateInstanceWithMetaDataFunction instanceFunction);
+};
+
+// Deprecation wrapper macro added only for 5.70, while backward typedef added in 4.0
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 70)
+/**
+ * Backward compatibility typedef for KPluginFactory
+ * @deprecated since 4.0, use KPluginFactory
+ */
+typedef KPluginFactory KLibFactory;
+#endif
+
+template<typename T>
+inline T *KPluginFactory::create(QObject *parent, const QVariantList &args)
+{
+ QObject *o =
+ create(T::staticMetaObject.className(), parent && parent->isWidgetType() ? reinterpret_cast<QWidget *>(parent) : nullptr, parent, args, QString());
+
+ T *t = qobject_cast<T *>(o);
+ if (!t) {
+ delete o;
+ }
+ return t;
+}
+
+template<typename T>
+inline T *KPluginFactory::create(const QString &keyword, QObject *parent, const QVariantList &args)
+{
+ QObject *o =
+ create(T::staticMetaObject.className(), parent && parent->isWidgetType() ? reinterpret_cast<QWidget *>(parent) : nullptr, parent, args, keyword);
+
+ T *t = qobject_cast<T *>(o);
+ if (!t) {
+ delete o;
+ }
+ return t;
+}
+
+template<typename T>
+inline T *KPluginFactory::create(QWidget *parentWidget, QObject *parent, const QString &keyword, const QVariantList &args)
+{
+ QObject *o = create(T::staticMetaObject.className(), parentWidget, parent, args, keyword);
+
+ T *t = qobject_cast<T *>(o);
+ if (!t) {
+ delete o;
+ }
+ return t;
+}
+
+Q_DECLARE_INTERFACE(KPluginFactory, KPluginFactory_iid)
+
+#endif // KPLUGINFACTORY_H
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2007 Matthias Kretz <kretz@kde.org>
+ SPDX-FileCopyrightText: 2007 Bernhard Loos <nhuh.put@web.de>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KPLUGINFACTORY_P_H
+#define KPLUGINFACTORY_P_H
+
+#include "kpluginfactory.h"
+#include <KPluginMetaData>
+#include <QMultiHash>
+
+class KPluginFactoryPrivate
+{
+ friend class KPluginFactory;
+
+public:
+ ~KPluginFactoryPrivate() = default;
+
+protected:
+ typedef QPair<const QMetaObject *, KPluginFactory::CreateInstanceFunction> Plugin;
+ using PluginWithMetadata = QPair<const QMetaObject *, KPluginFactory::CreateInstanceWithMetaDataFunction>;
+
+ KPluginFactoryPrivate() = default;
+
+ KPluginMetaData metaData;
+ QMultiHash<QString, Plugin> createInstanceHash;
+ QMultiHash<QString, PluginWithMetadata> createInstanceWithMetaDataHash;
+};
+
+#endif // KPLUGINFACTORY_P_H
--- /dev/null
+/*
+ * This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2007 Bernhard Loos <nhuh.put@web.de>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kpluginloader.h"
+
+#include "kpluginfactory.h"
+#include "kpluginmetadata.h"
+
+#include "kcoreaddons_debug.h"
+#include <QCoreApplication>
+#include <QDir>
+#include <QDirIterator>
+#include <QLibrary>
+#include <QMutex>
+
+// TODO: Upstream the versioning stuff to Qt
+// TODO: Patch for Qt to expose plugin-finding code directly
+// TODO: Add a convenience method to KFactory to replace KPluginLoader::factory()
+// TODO: (after the above) deprecate this class
+
+class KPluginLoaderPrivate
+{
+ Q_DECLARE_PUBLIC(KPluginLoader)
+public:
+ ~KPluginLoaderPrivate() = default;
+
+protected:
+ KPluginLoaderPrivate(const QString &libname)
+ : name(libname)
+ {
+ }
+
+ KPluginLoader *q_ptr = nullptr;
+ const QString name;
+ QString errorString;
+ QPluginLoader *loader = nullptr;
+ quint32 pluginVersion = ~0U;
+ bool pluginVersionResolved = false;
+ bool isPluginMetaDataSet = false;
+};
+
+QString KPluginLoader::findPlugin(const QString &name)
+{
+ // We just defer to Qt; unfortunately, QPluginLoader's searching code is not
+ // accessible without creating a QPluginLoader object.
+
+ // Workaround for QTBUG-39642
+ static QMutex s_qtWorkaroundMutex;
+ QMutexLocker lock(&s_qtWorkaroundMutex);
+
+ QPluginLoader loader(name);
+ return loader.fileName();
+}
+
+KPluginLoader::KPluginLoader(const QString &plugin, QObject *parent)
+ : QObject(parent)
+ , d_ptr(new KPluginLoaderPrivate(plugin))
+{
+ d_ptr->q_ptr = this;
+ Q_D(KPluginLoader);
+
+ d->loader = new QPluginLoader(plugin, this);
+}
+
+KPluginLoader::KPluginLoader(const KPluginName &pluginName, QObject *parent)
+ : QObject(parent)
+ , d_ptr(new KPluginLoaderPrivate(pluginName.name()))
+{
+ d_ptr->q_ptr = this;
+ Q_D(KPluginLoader);
+
+ d->loader = new QPluginLoader(this);
+
+ if (pluginName.isValid()) {
+ d->loader->setFileName(pluginName.name());
+ if (d->loader->fileName().isEmpty()) {
+ qCDebug(KCOREADDONS_DEBUG) << "Failed to load plugin" << pluginName.name() << d->loader->errorString() << "\nPlugin search paths are"
+ << QCoreApplication::libraryPaths() << "\nThe environment variable QT_PLUGIN_PATH might be not correctly set";
+ }
+ } else {
+ d->errorString = pluginName.errorString();
+ }
+}
+
+KPluginLoader::~KPluginLoader() = default;
+
+KPluginFactory *KPluginLoader::factory()
+{
+ Q_D(KPluginLoader);
+
+ QObject *obj = instance();
+
+ if (!obj) {
+ return nullptr;
+ }
+
+ KPluginFactory *factory = qobject_cast<KPluginFactory *>(obj);
+
+ if (factory == nullptr) {
+ qCDebug(KCOREADDONS_DEBUG) << "Expected a KPluginFactory, got a" << obj->metaObject()->className();
+ delete obj;
+ d->errorString = tr("The library %1 does not offer a KPluginFactory.").arg(d->name);
+ }
+
+ if (!d->isPluginMetaDataSet && factory) {
+ factory->setMetaData(KPluginMetaData(*d->loader));
+ d->isPluginMetaDataSet = true;
+ }
+
+ return factory;
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 84)
+quint32 KPluginLoader::pluginVersion()
+{
+ Q_D(const KPluginLoader);
+
+ if (!load()) {
+ return qint32(-1);
+ }
+ return d->pluginVersion;
+}
+#endif
+
+QString KPluginLoader::pluginName() const
+{
+ Q_D(const KPluginLoader);
+
+ return d->name;
+}
+
+QString KPluginLoader::errorString() const
+{
+ Q_D(const KPluginLoader);
+
+ if (!d->errorString.isEmpty()) {
+ return d->errorString;
+ }
+
+ return d->loader->errorString();
+}
+
+QString KPluginLoader::fileName() const
+{
+ Q_D(const KPluginLoader);
+ return d->loader->fileName();
+}
+
+QObject *KPluginLoader::instance()
+{
+ Q_D(const KPluginLoader);
+
+ if (!load()) {
+ return nullptr;
+ }
+
+ return d->loader->instance();
+}
+
+bool KPluginLoader::isLoaded() const
+{
+ Q_D(const KPluginLoader);
+
+ return d->loader->isLoaded() && d->pluginVersionResolved;
+}
+
+bool KPluginLoader::load()
+{
+ Q_D(KPluginLoader);
+
+ if (!d->loader->load()) {
+ return false;
+ }
+
+ if (d->pluginVersionResolved) {
+ return true;
+ }
+
+ Q_ASSERT(!fileName().isEmpty());
+ QLibrary lib(fileName());
+ Q_ASSERT(lib.isLoaded()); // already loaded by QPluginLoader::load()
+
+ // TODO: this messes up KPluginLoader::errorString(): it will change from unknown error to could not resolve kde_plugin_version
+ quint32 *version = reinterpret_cast<quint32 *>(lib.resolve("kde_plugin_version"));
+ if (version) {
+ d->pluginVersion = *version;
+ } else {
+ d->pluginVersion = ~0U;
+ }
+ d->pluginVersionResolved = true;
+
+ return true;
+}
+
+QLibrary::LoadHints KPluginLoader::loadHints() const
+{
+ Q_D(const KPluginLoader);
+
+ return d->loader->loadHints();
+}
+
+QJsonObject KPluginLoader::metaData() const
+{
+ Q_D(const KPluginLoader);
+
+ return d->loader->metaData();
+}
+
+void KPluginLoader::setLoadHints(QLibrary::LoadHints loadHints)
+{
+ Q_D(KPluginLoader);
+
+ d->loader->setLoadHints(loadHints);
+}
+
+bool KPluginLoader::unload()
+{
+ Q_D(KPluginLoader);
+
+ // Even if *this* call does not unload it, another might,
+ // so we err on the side of re-resolving the version.
+ d->pluginVersionResolved = false;
+
+ return d->loader->unload();
+}
+
+void KPluginLoader::forEachPlugin(const QString &directory, std::function<void(const QString &)> callback)
+{
+ QStringList dirsToCheck;
+#ifdef Q_OS_ANDROID
+ dirsToCheck << QCoreApplication::libraryPaths();
+#else
+ if (QDir::isAbsolutePath(directory)) {
+ dirsToCheck << directory;
+ } else {
+ const QStringList listPaths = QCoreApplication::libraryPaths();
+ dirsToCheck.reserve(listPaths.size());
+ for (const QString &libDir : listPaths) {
+ dirsToCheck << libDir + QLatin1Char('/') + directory;
+ }
+ }
+#endif
+
+ qCDebug(KCOREADDONS_DEBUG) << "Checking for plugins in" << dirsToCheck;
+
+ for (const QString &dir : qAsConst(dirsToCheck)) {
+ QDirIterator it(dir, QDir::Files);
+ while (it.hasNext()) {
+ it.next();
+#ifdef Q_OS_ANDROID
+ QString prefix(QLatin1String("libplugins_") + QString(directory).replace(QLatin1Char('/'), QLatin1String("_")));
+ if (!prefix.endsWith(QLatin1Char('_'))) {
+ prefix.append(QLatin1Char('_'));
+ }
+ if (it.fileName().startsWith(prefix) && QLibrary::isLibrary(it.fileName())) {
+#else
+ if (QLibrary::isLibrary(it.fileName())) {
+#endif
+ callback(it.fileInfo().absoluteFilePath());
+ }
+ }
+ }
+}
+
+QVector<KPluginMetaData> KPluginLoader::findPlugins(const QString &directory, std::function<bool(const KPluginMetaData &)> filter)
+{
+ QVector<KPluginMetaData> ret;
+ QSet<QString> addedPluginIds;
+ forEachPlugin(directory, [&](const QString &pluginPath) {
+ KPluginMetaData metadata(pluginPath);
+ if (!metadata.isValid()) {
+ return;
+ }
+ if (addedPluginIds.contains(metadata.pluginId())) {
+ return;
+ }
+ if (filter && !filter(metadata)) {
+ return;
+ }
+ addedPluginIds << metadata.pluginId();
+ ret.append(metadata);
+ });
+ return ret;
+}
+
+QVector<KPluginMetaData> KPluginLoader::findPluginsById(const QString &directory, const QString &pluginId)
+{
+ auto filter = [&pluginId](const KPluginMetaData &md) -> bool {
+ return md.pluginId() == pluginId;
+ };
+ return KPluginLoader::findPlugins(directory, filter);
+}
+
+QList<QObject *> KPluginLoader::instantiatePlugins(const QString &directory, std::function<bool(const KPluginMetaData &)> filter, QObject *parent)
+{
+ QList<QObject *> ret;
+ QPluginLoader loader;
+ const QVector<KPluginMetaData> listMetaData = findPlugins(directory, filter);
+ for (const KPluginMetaData &metadata : listMetaData) {
+ loader.setFileName(metadata.fileName());
+ QObject *obj = loader.instance();
+ if (!obj) {
+ qCWarning(KCOREADDONS_DEBUG).nospace() << "Could not instantiate plugin \"" << metadata.fileName() << "\": " << loader.errorString();
+ continue;
+ }
+ obj->setParent(parent);
+ ret.append(obj);
+ }
+ return ret;
+}
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2007 Bernhard Loos <nhuh.put@web.de>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+#ifndef KPLUGINLOADER_H
+#define KPLUGINLOADER_H
+
+#include <kcoreaddons_export.h>
+#include <kexportplugin.h>
+
+#include <QPluginLoader>
+
+#include <functional>
+#include <memory>
+
+class KPluginFactory;
+class KPluginMetaData;
+
+class KPluginLoaderPrivate;
+class KPluginName;
+
+/**
+ * \class KPluginLoader kpluginloader.h <KPluginLoader>
+ *
+ * This class behaves largely like QPluginLoader (and, indeed, uses it
+ * internally), but additionally reads the plugin version, as provided by the
+ * K_EXPORT_PLUGIN_VERSION macro (see pluginVersion()) and provides access to a
+ * KPluginFactory instance if the plugin provides one (see factory())
+ *
+ * Note that the factory() is a typesafe convenience method that just wraps a
+ * qobject_cast on the result of QPluginLoader::instance(). Therefore, if you do
+ * not need the plugin version feature, you can (and should) just use
+ * QPluginLoader instead.
+ *
+ * Unlike QPluginLoader, it is not possible to re-use KPluginLoader for more
+ * than one plugin (it provides no setFileName method).
+ *
+ * The same notes and caveats that apply to QPluginLoader also apply to
+ * KPluginLoader.
+ *
+ * Sample code:
+ * \code
+ * KPluginLoader loader( ...library or kservice... );
+ * KPluginFactory* factory = loader.factory();
+ * if (!factory) {
+ * qWarning() << "Error loading plugin:" << loader.errorString();
+ * } else {
+ * MyInterface* obj = factory->create<MyInterface>();
+ * if (!obj) {
+ * qWarning() << "Error creating object";
+ * }
+ * }
+ * \endcode
+ *
+ * \see KPluginFactory
+ *
+ * \author Bernhard Loos <nhuh.put@web.de>
+ */
+class KCOREADDONS_EXPORT KPluginLoader : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString fileName READ fileName)
+ Q_PROPERTY(QLibrary::LoadHints loadHints READ loadHints WRITE setLoadHints)
+ Q_PROPERTY(QString pluginName READ pluginName)
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 84)
+ Q_PROPERTY(quint32 pluginVersion READ pluginVersion)
+#endif
+public:
+ /**
+ * Load a plugin by name.
+ *
+ * This should be the name of the plugin object file, without any suffix
+ * (like .so or .dll). Plugin object files should not have a 'lib' prefix.
+ *
+ * fileName() will be empty if the plugin could not be found.
+ *
+ * \param plugin The name of the plugin.
+ * \param parent A parent object.
+ */
+ explicit KPluginLoader(const QString &plugin, QObject *parent = nullptr);
+
+ /**
+ * Load a plugin by name.
+ *
+ * This constructor behaves exactly the same as
+ * KPluginLoader(const QString&,QObject*). It allows any class that can be
+ * cast to KPluginName (such as KService) to be passed to KPluginLoader.
+ *
+ * \param name The name of the plugin.
+ * \param parent A parent object.
+ */
+ explicit KPluginLoader(const KPluginName &name, QObject *parent = nullptr);
+
+ /**
+ * Destroys the plugin loader.
+ *
+ * Unless unload() was called explicitly, the plugin stays in memory until
+ * the application terminates.
+ */
+ ~KPluginLoader();
+
+ /**
+ * Returns the factory object of the plugin.
+ *
+ * This is typically created by one of the KPluginFactory macros.
+ * Internally, this uses QPluginLoader::instance(), and the same
+ * behaviours apply.
+ *
+ * Since KF 5.77, the factory will have the metadata set fetched from
+ * any JSON metadata that is embedded into the plugin binary.
+ *
+ * \returns The factory of the plugin or @c nullptr on error.
+ */
+ KPluginFactory *factory();
+
+ /**
+ * Returns the name of this plugin as given to the constructor.
+ *
+ * If the KService constructor was used, this is the name of the library
+ * provided by the service.
+ *
+ * \returns The plugin name.
+ *
+ * \see fileName()
+ */
+ QString pluginName() const;
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 84)
+ /**
+ * Returns the plugin version.
+ *
+ * This will load the plugin if it is not already loaded.
+ *
+ * \returns The version given to K_EXPORT_PLUGIN_VERSION, or (quint32) -1 if
+ * the macro was not used or the plugin could not be loaded.
+ * @deprecated Since 5.84, use @ref KPluginMetaData::version() or a versioned namespace instead
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 84, "Use KPluginMetaData::version or a versioned namespace instead")
+ quint32 pluginVersion();
+#endif
+
+ /**
+ * Locates a plugin.
+ *
+ * Searches for a dynamic object file in the locations KPluginLoader and
+ * QPluginLoader would search (ie: the current directory and
+ * QCoreApplication::libraryPaths()).
+ *
+ * This can be useful if you wish to use a plugin that does not conform to
+ * the Qt plugin scheme of providing a QObject that declares
+ * Q_PLUGIN_METADATA. In this case, you can find the plugin with this
+ * method, and load it with QLibrary.
+ *
+ * Note that the path is not necessarily absolute. In particular, if the
+ * plugin is found in the current directory, it will be a relative path.
+ *
+ * \param name The name of the plugin (can be a relative path; see above).
+ * This should not include a file extension (like .so or .dll).
+ * \returns The path to the plugin if it was found, or QString() if it
+ * could not be found.
+ *
+ * @since 5.0
+ */
+ static QString findPlugin(const QString &name);
+
+ /**
+ * Returns the last error.
+ *
+ * \returns The description of the last error.
+ *
+ * \see QPluginLoader::errorString()
+ */
+ QString errorString() const;
+
+ /**
+ * Returns the path of the plugin.
+ *
+ * This will be the full path of the plugin if it was found, and empty if
+ * it could not be found.
+ *
+ * \returns The full path of the plugin, or the null string if it could
+ * not be found.
+ *
+ * \see QPluginLoader::fileName(), pluginName()
+ */
+ QString fileName() const;
+
+ /**
+ * Returns the root object of the plugin.
+ *
+ * The plugin will be loaded if necessary. If the plugin used one of the
+ * KPluginFactory macros, you should use factory() instead.
+ *
+ * \returns The plugin's root object.
+ *
+ * \see QPluginLoader::instance()
+ */
+ QObject *instance();
+
+ /**
+ * Determines whether the plugin is loaded.
+ *
+ * \returns @c True if the plugin is loaded, @c false otherwise.
+ *
+ * \see QPluginLoader::isLoaded()
+ */
+ bool isLoaded() const;
+
+ /**
+ * Loads the plugin.
+ *
+ * It is safe to call this multiple times; if the plugin was already loaded,
+ * it will just return @c true.
+ *
+ * Methods that require the plugin to be loaded will load it as necessary
+ * anyway, so you do not normally need to call this method.
+ *
+ * \returns @c True if the plugin was loaded successfully, @c false
+ * otherwise.
+ *
+ * \see QPluginLoader::load()
+ */
+ bool load();
+
+ /**
+ * Returns the load hints for the plugin.
+ *
+ * Determines how load() should work. See QLibrary::loadHints for more
+ * information.
+ *
+ * \returns The load hints for the plugin.
+ *
+ * \see QPluginLoader::loadHints(), setLoadHints()
+ */
+ QLibrary::LoadHints loadHints() const;
+
+ /**
+ * Returns the meta data for the plugin.
+ *
+ * \returns A JSON object containing the plugin's metadata, if found.
+ *
+ * \see QPluginLoader::metaData()
+ */
+ QJsonObject metaData() const;
+
+ /**
+ * Set the load hints for the plugin.
+ *
+ * Determines how load() should work. See QLibrary::loadHints for more
+ * information.
+ *
+ * \param loadHints The load hints for the plugin.
+ *
+ * \see QPluginLoader::setLoadHints(), loadHints()
+ */
+ void setLoadHints(QLibrary::LoadHints loadHints);
+
+ /**
+ * Attempts to unload the plugin.
+ *
+ * If other instances of KPluginLoader or QPluginLoader are using the same
+ * plugin, this will fail; unloading will only happen when every instance
+ * has called unload().
+ *
+ * \returns @c True if the plugin was unloaded, @c false otherwise.
+ *
+ * \see QPluginLoader::unload(), load(), instance(), factory()
+ */
+ bool unload();
+
+ /**
+ * Finds and instantiates (by calling QPluginLoader::instance()) all plugins from a given
+ * directory. Only plugins which have JSON metadata will be considered. A filter can be passed
+ * which determines which of the found plugins should actually be loaded.
+ *
+ * If you use KConfig you could have a group "Plugins" in your configuration file with the
+ * plugin name as the key and true/false as the value to indicate whether the plugin should
+ * be loaded. In order to easily load all the enable plugins you could use the following code:
+ * @code
+ * KConfigGroup pluginGroup = KSharedConfig::openConfig()->group("Plugins");
+ * auto filter = [&](const KPluginMetaData &md) {
+ * if (!pluginGroup.hasKey(md.pluginName())) {
+ * return md.isEnabledByDefault();
+ * } else {
+ * return pluginGroup.readEntry(md.pluginName(), false);
+ * }
+ * };
+ * QList<QObject*> plugins = KPluginLoader::instantiatePlugins("myapp", filter);
+ * @endcode
+ *
+ * @param directory the directory to search for plugins. If a relative path is given for @p directory,
+ * all entries of QCoreApplication::libraryPaths() will be checked with @p directory appended as a
+ * subdirectory. If an absolute path is given only that directory will be searched.
+ *
+ * @param filter a callback function that returns @c true if the found plugin should be loaded
+ * and @c false if it should be skipped. If this argument is omitted all plugins will be loaded.
+ *
+ * @param parent the parent to set for the instantiated plugins, if the
+ * plugins were not already loaded.
+ *
+ * @note If the plugins have been previously loaded (via QPluginLoader,
+ * directly or due to this class) without being deleted in the meantime
+ * then they are not re-created or re-parented and will be returned using
+ * the parent they were originally created with. @sa
+ * QPluginLoader::instance().
+ *
+ * @return a list containing an instantiation of each plugin that met the filter criteria
+ *
+ * @see KPluginLoader::findPlugins()
+ *
+ * @since 5.1
+ */
+ static QList<QObject *> instantiatePlugins(const QString &directory,
+ std::function<bool(const KPluginMetaData &)> filter = std::function<bool(const KPluginMetaData &)>(),
+ QObject *parent = nullptr);
+
+ /**
+ * Find all plugins inside @p directory. Only plugins which have JSON metadata will be considered.
+ *
+ * @param directory The directory to search for plugins. If a relative path is given for @p directory,
+ * all entries of QCoreApplication::libraryPaths() will be checked with @p directory appended as a
+ * subdirectory. If an absolute path is given only that directory will be searched.
+ *
+ * @param filter a callback function that returns @c true if the found plugin should be loaded
+ * and @c false if it should be skipped. If this argument is omitted all plugins will be loaded.
+ *
+ * @return all plugins found in @p directory that fulfil the constraints of @p filter
+ *
+ * @see KPluginLoader::instantiatePlugins()
+ *
+ * @since 5.1
+ */
+ static QVector<KPluginMetaData> findPlugins(const QString &directory,
+ std::function<bool(const KPluginMetaData &)> filter = std::function<bool(const KPluginMetaData &)>());
+
+ /**
+ * Find all plugins inside @p directory with a given pluginId. Only plugins which have JSON metadata will be considered.
+ *
+ * @param directory The directory to search for plugins. If a relative path is given for @p directory,
+ * all entries of QCoreApplication::libraryPaths() will be checked with @p directory appended as a
+ * subdirectory. If an absolute path is given only that directory will be searched.
+ *
+ * @param pluginId The Id of the plugin, for example KPluginMetaData.pluginId().
+ *
+ * @return all plugins found in @p directory with the given pluginId.
+ *
+ * @see KPluginLoader::instantiatePlugins()
+ *
+ * @since 5.11
+ */
+ static QVector<KPluginMetaData> findPluginsById(const QString &directory, const QString &pluginId);
+
+ /**
+ * Invokes @p callback for each valid plugin found inside @p directory. This is useful if
+ * your application needs to customize the behaviour of KPluginLoader::findPlugins() or
+ * KPluginLoader::instantiatePlugins().
+ *
+ * @note The files found do not necessarily contain JSON metadata and may not be loadable using K/QPluginLoader.
+ * The only guarantee made is that they are valid library file names as determined by QLibrary::isLibrary().
+ *
+ * @param directory The directory to search for plugins. If a relative path is given for @p directory,
+ * all entries of QCoreApplication::libraryPaths() will be checked with @p directory appended as a
+ * subdirectory. If an absolute path is given only that directory will be searched.
+ *
+ * @param callback This function will be invoked for each valid plugin that is found. It will receive
+ * the absolute path to the plugin as an argument
+ *
+ * @see KPluginLoader::findPlugins(), KPluginLoader::instantiatePlugins()
+ *
+ * @since 5.1
+ */
+ static void forEachPlugin(const QString &directory, std::function<void(const QString &)> callback = std::function<void(const QString &)>());
+
+private:
+ Q_DECLARE_PRIVATE(KPluginLoader)
+ Q_DISABLE_COPY(KPluginLoader)
+
+ std::unique_ptr<KPluginLoaderPrivate> const d_ptr;
+};
+
+/**
+ * Represents the name of a plugin intended for KPluginLoader.
+ *
+ * This exists only so that classes such as KService can provide a cast
+ * operator to allow them to be used as arguments to KPluginLoader.
+ * Unless you are implementing such a cast operator, you should never
+ * need to use this class directly.
+ */
+// NOTE: this class is all inline, as it mainly exists for typing reasons
+// (ie: to prevent the issues that would be caused by adding an
+// operator QString() method to KService)
+class KCOREADDONS_EXPORT KPluginName
+{
+public:
+ /**
+ * Construct a (valid) plugin name from a string.
+ *
+ * If there was an error and the name could not be determined,
+ * fromErrorString() should be used instead to construct an
+ * appropriate error message.
+ *
+ * @param name The name of the plugin; this should not be empty.
+ */
+ inline explicit KPluginName(const QString &name);
+
+ /**
+ * The name of the plugin.
+ *
+ * @returns The string passed to the constructor if isValid() is
+ * @c true, QString() otherwise.
+ */
+ inline QString name() const;
+
+ /**
+ * Whether the name is valid.
+ *
+ * Note that this only determines how the KPluginName was
+ * constructed, not anything about the value of the string.
+ *
+ * @returns @c true if the KPluginName(const QString&) constructor
+ * was used, @c false if fromErrorString() was used.
+ */
+ inline bool isValid() const;
+
+ /**
+ * The error string if no name could be determined.
+ *
+ * @returns The string passed to fromErrorString() if isValid() is
+ * @c false, QString() otherwise.
+ */
+ inline QString errorString() const;
+
+ /**
+ * Construct an invalid plugin name with an error message.
+ *
+ * When this object is passed to KPluginLoader, @p errorString
+ * will be used for KPluginLoader::errorString().
+ *
+ * @param errorString The (translated) error string.
+ */
+ static inline KPluginName fromErrorString(const QString &errorString);
+
+private:
+ inline KPluginName(const QString &name, bool isError);
+
+ QString m_name;
+ bool m_isError;
+};
+
+inline KPluginName::KPluginName(const QString &name)
+ : m_name(name)
+ , m_isError(false)
+{
+}
+inline KPluginName::KPluginName(const QString &name, bool isError)
+ : m_name(name)
+ , m_isError(isError)
+{
+}
+inline QString KPluginName::name() const
+{
+ return m_isError ? QString() : m_name;
+}
+inline bool KPluginName::isValid() const
+{
+ return !m_isError;
+}
+inline QString KPluginName::errorString() const
+{
+ return m_isError ? m_name : QString();
+}
+inline KPluginName KPluginName::fromErrorString(const QString &errorString)
+{
+ return KPluginName(errorString, true);
+}
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kpluginmetadata.h"
+#include "desktopfileparser_p.h"
+
+#include "kcoreaddons_debug.h"
+#include <QFileInfo>
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QLocale>
+#include <QMimeDatabase>
+#include <QPluginLoader>
+
+#include "kaboutdata.h"
+#include "kpluginloader.h"
+
+class KPluginMetaDataPrivate : public QSharedData
+{
+public:
+ QString metaDataFileName;
+};
+
+KPluginMetaData::KPluginMetaData()
+{
+}
+
+KPluginMetaData::KPluginMetaData(const KPluginMetaData &other)
+ : m_metaData(other.m_metaData)
+ , m_fileName(other.fileName())
+ , d(other.d)
+{
+}
+
+KPluginMetaData &KPluginMetaData::operator=(const KPluginMetaData &other)
+{
+ m_metaData = other.m_metaData;
+ m_fileName = other.m_fileName;
+ d = other.d;
+ return *this;
+}
+
+KPluginMetaData::~KPluginMetaData()
+{
+}
+
+KPluginMetaData::KPluginMetaData(const QString &file)
+{
+ if (file.endsWith(QLatin1String(".desktop"))) {
+ loadFromDesktopFile(file, QStringList());
+ } else if (file.endsWith(QLatin1String(".json"))) {
+ d = new KPluginMetaDataPrivate;
+ QFile f(file);
+ bool b = f.open(QIODevice::ReadOnly);
+ if (!b) {
+ qCWarning(KCOREADDONS_DEBUG) << "Couldn't open" << file;
+ return;
+ }
+
+ QJsonParseError error;
+ m_metaData = QJsonDocument::fromJson(f.readAll(), &error).object();
+ if (error.error) {
+ qCWarning(KCOREADDONS_DEBUG) << "error parsing" << file << error.errorString();
+ }
+ m_fileName = file;
+ d->metaDataFileName = file;
+ } else {
+ QPluginLoader loader(file);
+ m_fileName = QFileInfo(loader.fileName()).absoluteFilePath();
+ const auto qtMetaData = loader.metaData();
+ if (!qtMetaData.isEmpty()) {
+ m_metaData = qtMetaData.value(QStringLiteral("MetaData")).toObject();
+ if (m_metaData.isEmpty()) {
+ qCWarning(KCOREADDONS_DEBUG) << "plugin metadata in" << file << "does not have a valid 'MetaData' object";
+ }
+ } else {
+ qCWarning(KCOREADDONS_DEBUG) << "no metadata found in" << file << loader.errorString();
+ }
+ }
+}
+
+KPluginMetaData::KPluginMetaData(const QPluginLoader &loader)
+{
+ m_fileName = QFileInfo(loader.fileName()).absoluteFilePath();
+ m_metaData = loader.metaData().value(QStringLiteral("MetaData")).toObject();
+}
+
+KPluginMetaData::KPluginMetaData(const KPluginLoader &loader)
+{
+ m_fileName = QFileInfo(loader.fileName()).absoluteFilePath();
+ m_metaData = loader.metaData().value(QStringLiteral("MetaData")).toObject();
+}
+
+KPluginMetaData::KPluginMetaData(const QJsonObject &metaData, const QString &file)
+{
+ m_fileName = file;
+ m_metaData = metaData;
+}
+
+KPluginMetaData::KPluginMetaData(const QJsonObject &metaData, const QString &pluginFile, const QString &metaDataFile)
+{
+ m_fileName = pluginFile;
+ m_metaData = metaData;
+ if (!metaDataFile.isEmpty()) {
+ d = new KPluginMetaDataPrivate;
+ d->metaDataFileName = metaDataFile;
+ }
+}
+
+KPluginMetaData KPluginMetaData::findPluginById(const QString &directory, const QString &pluginId)
+
+{
+ KPluginMetaData metaData;
+ KPluginLoader::forEachPlugin(directory, [&](const QString &pluginPath) {
+ if (metaData.isValid()) {
+ return; // We have already found the match
+ }
+ if (QFileInfo(pluginPath).baseName() != pluginId) {
+ return;
+ }
+ // Load the JSON metadata and make sure the pluginId matches
+ KPluginMetaData uncheckedMetadata(pluginPath);
+ if (uncheckedMetadata.isValid() && uncheckedMetadata.pluginId() == pluginId) {
+ metaData = uncheckedMetadata;
+ }
+ });
+
+ if (metaData.isValid()) {
+ return metaData;
+ }
+
+ // TODO KF6 remove, this is fallback logic if the pluginId is not the same as the file name
+ auto filter = [&pluginId](const KPluginMetaData &md) -> bool {
+ return md.pluginId() == pluginId;
+ };
+ const QVector<KPluginMetaData> metaDataVector = KPluginLoader::findPlugins(directory, filter);
+ if (!metaDataVector.isEmpty()) {
+ metaData = metaDataVector.first();
+ }
+
+ return metaData;
+}
+
+KPluginMetaData KPluginMetaData::fromDesktopFile(const QString &file, const QStringList &serviceTypes)
+{
+ KPluginMetaData result;
+ result.loadFromDesktopFile(file, serviceTypes);
+ return result;
+}
+
+void KPluginMetaData::loadFromDesktopFile(const QString &file, const QStringList &serviceTypes)
+{
+ QString libraryPath;
+ if (!DesktopFileParser::convert(file, serviceTypes, m_metaData, &libraryPath)) {
+ Q_ASSERT(!isValid());
+ return; // file could not be parsed for some reason, leave this object invalid
+ }
+ d = new KPluginMetaDataPrivate;
+ d->metaDataFileName = QFileInfo(file).absoluteFilePath();
+ if (!libraryPath.isEmpty()) {
+ // this was a plugin with a shared library
+ m_fileName = libraryPath;
+ } else {
+ // no library, make filename point to the .desktop file
+ m_fileName = d->metaDataFileName;
+ }
+}
+
+QJsonObject KPluginMetaData::rawData() const
+{
+ return m_metaData;
+}
+
+QString KPluginMetaData::fileName() const
+{
+ return m_fileName;
+}
+
+QString KPluginMetaData::metaDataFileName() const
+{
+ return d ? d->metaDataFileName : m_fileName;
+}
+
+bool KPluginMetaData::isValid() const
+{
+ // it can be valid even if m_fileName is empty (as long as the plugin id is set in the metadata)
+ return !pluginId().isEmpty() && !m_metaData.isEmpty();
+}
+
+bool KPluginMetaData::isHidden() const
+{
+ return rootObject()[QStringLiteral("Hidden")].toBool();
+}
+
+QJsonObject KPluginMetaData::rootObject() const
+{
+ return m_metaData[QStringLiteral("KPlugin")].toObject();
+}
+
+QStringList KPluginMetaData::readStringList(const QJsonObject &obj, const QString &key)
+{
+ const QJsonValue value = obj.value(key);
+ if (value.isUndefined() || value.isObject() || value.isNull()) {
+ return QStringList();
+ } else if (value.isArray()) {
+ return value.toVariant().toStringList();
+ } else {
+ QString asString = value.isString() ? value.toString() : value.toVariant().toString();
+ if (asString.isEmpty()) {
+ return QStringList();
+ }
+ const QString id = obj.value(QStringLiteral("KPlugin")).toObject().value(QStringLiteral("Id")).toString();
+ qCWarning(KCOREADDONS_DEBUG) << "Expected JSON property" << key
+ << "to be a string list."
+ " Treating it as a list with a single entry:"
+ << asString << id.toLatin1().constData();
+ return QStringList(asString);
+ }
+}
+
+QJsonValue KPluginMetaData::readTranslatedValue(const QJsonObject &jo, const QString &key, const QJsonValue &defaultValue)
+{
+ QString languageWithCountry = QLocale().name();
+ auto it = jo.constFind(key + QLatin1Char('[') + languageWithCountry + QLatin1Char(']'));
+ if (it != jo.constEnd()) {
+ return it.value();
+ }
+ const QStringRef language = languageWithCountry.midRef(0, languageWithCountry.indexOf(QLatin1Char('_')));
+ it = jo.constFind(key + QLatin1Char('[') + language + QLatin1Char(']'));
+ if (it != jo.constEnd()) {
+ return it.value();
+ }
+ // no translated value found -> check key
+ it = jo.constFind(key);
+ if (it != jo.constEnd()) {
+ return jo.value(key);
+ }
+ return defaultValue;
+}
+
+QString KPluginMetaData::readTranslatedString(const QJsonObject &jo, const QString &key, const QString &defaultValue)
+{
+ return readTranslatedValue(jo, key, defaultValue).toString(defaultValue);
+}
+
+static inline void addPersonFromJson(const QJsonObject &obj, QList<KAboutPerson> *out)
+{
+ KAboutPerson person = KAboutPerson::fromJSON(obj);
+ if (person.name().isEmpty()) {
+ qCWarning(KCOREADDONS_DEBUG) << "Invalid plugin metadata: Attempting to create a KAboutPerson from json without 'Name' property:" << obj;
+ return;
+ }
+ out->append(person);
+}
+
+static QList<KAboutPerson> aboutPersonFromJSON(const QJsonValue &people)
+{
+ QList<KAboutPerson> ret;
+ if (people.isObject()) {
+ // single author
+ addPersonFromJson(people.toObject(), &ret);
+ } else if (people.isArray()) {
+ const QJsonArray peopleArray = people.toArray();
+ for (const QJsonValue &val : peopleArray) {
+ if (val.isObject()) {
+ addPersonFromJson(val.toObject(), &ret);
+ }
+ }
+ }
+ return ret;
+}
+
+QList<KAboutPerson> KPluginMetaData::authors() const
+{
+ return aboutPersonFromJSON(rootObject()[QStringLiteral("Authors")]);
+}
+
+QList<KAboutPerson> KPluginMetaData::translators() const
+{
+ return aboutPersonFromJSON(rootObject()[QStringLiteral("Translators")]);
+}
+
+QList<KAboutPerson> KPluginMetaData::otherContributors() const
+{
+ return aboutPersonFromJSON(rootObject()[QStringLiteral("OtherContributors")]);
+}
+
+QString KPluginMetaData::category() const
+{
+ return rootObject()[QStringLiteral("Category")].toString();
+}
+
+QString KPluginMetaData::description() const
+{
+ return readTranslatedString(rootObject(), QStringLiteral("Description"));
+}
+
+QString KPluginMetaData::iconName() const
+{
+ return rootObject()[QStringLiteral("Icon")].toString();
+}
+
+QString KPluginMetaData::license() const
+{
+ return rootObject()[QStringLiteral("License")].toString();
+}
+
+QString KPluginMetaData::licenseText() const
+{
+ return KAboutLicense::byKeyword(license()).text();
+}
+
+QString KPluginMetaData::name() const
+{
+ return readTranslatedString(rootObject(), QStringLiteral("Name"));
+}
+
+QString KPluginMetaData::copyrightText() const
+{
+ return readTranslatedString(rootObject(), QStringLiteral("Copyright"));
+}
+
+QString KPluginMetaData::extraInformation() const
+{
+ return readTranslatedString(rootObject(), QStringLiteral("ExtraInformation"));
+}
+
+QString KPluginMetaData::pluginId() const
+{
+ QJsonObject root = rootObject();
+ auto nameFromMetaData = root.constFind(QStringLiteral("Id"));
+ if (nameFromMetaData != root.constEnd()) {
+ const QString id = nameFromMetaData.value().toString();
+ if (!id.isEmpty()) {
+ return id;
+ }
+ }
+ // passing QFileInfo an empty string gives the CWD, which is not what we want
+ if (m_fileName.isEmpty()) {
+ return QString();
+ }
+ return QFileInfo(m_fileName).baseName();
+}
+
+QString KPluginMetaData::version() const
+{
+ return rootObject()[QStringLiteral("Version")].toString();
+}
+
+QString KPluginMetaData::website() const
+{
+ return rootObject()[QStringLiteral("Website")].toString();
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 79)
+QStringList KPluginMetaData::dependencies() const
+{
+ return readStringList(rootObject(), QStringLiteral("Dependencies"));
+}
+#endif
+
+QStringList KPluginMetaData::serviceTypes() const
+{
+ return readStringList(rootObject(), QStringLiteral("ServiceTypes"));
+}
+
+QStringList KPluginMetaData::mimeTypes() const
+{
+ return readStringList(rootObject(), QStringLiteral("MimeTypes"));
+}
+
+bool KPluginMetaData::supportsMimeType(const QString &mimeType) const
+{
+ // Check for exact matches first. This can delay parsing the full MIME
+ // database until later and noticeably speed up application startup on
+ // slower systems.
+ const QStringList mimes = mimeTypes();
+ if (mimes.contains(mimeType)) {
+ return true;
+ }
+
+ // Now check for MIME type inheritance to find non-exact matches:
+ QMimeDatabase db;
+ const QMimeType mime = db.mimeTypeForName(mimeType);
+ if (!mime.isValid()) {
+ return false;
+ }
+
+ auto inherits = [&](const QString &supportedMimeName) {
+ return mime.inherits(supportedMimeName);
+ };
+ return std::find_if(mimes.begin(), mimes.end(), inherits) != mimes.end();
+}
+
+QStringList KPluginMetaData::formFactors() const
+{
+ return readStringList(rootObject(), QStringLiteral("FormFactors"));
+}
+
+bool KPluginMetaData::isEnabledByDefault() const
+{
+ QJsonValue val = rootObject()[QStringLiteral("EnabledByDefault")];
+ if (val.isBool()) {
+ return val.toBool();
+ } else if (val.isString()) {
+ return val.toString() == QLatin1String("true");
+ }
+ return false;
+}
+
+int KPluginMetaData::initialPreference() const
+{
+ return rootObject()[QStringLiteral("InitialPreference")].toInt();
+}
+
+QString KPluginMetaData::value(const QString &key, const QString &defaultValue) const
+{
+ const QJsonValue value = m_metaData.value(key);
+ if (value.isString()) {
+ return value.toString(defaultValue);
+ } else if (value.isArray()) {
+ qCWarning(KCOREADDONS_DEBUG) << "Expected JSON property" << key
+ << "to be a single string."
+ " but it is a stringlist";
+ const QStringList list = value.toVariant().toStringList();
+ if (list.isEmpty()) {
+ return defaultValue;
+ }
+ return list.join(QChar::fromLatin1(','));
+ } else if (value.isBool()) {
+ qCWarning(KCOREADDONS_DEBUG) << "Expected JSON property" << key
+ << "to be a single string."
+ " but it is a bool";
+ return value.toBool() ? QStringLiteral("true") : QStringLiteral("false");
+ }
+ return defaultValue;
+}
+
+bool KPluginMetaData::operator==(const KPluginMetaData &other) const
+{
+ return m_fileName == other.m_fileName && m_metaData == other.m_metaData;
+}
+
+QObject *KPluginMetaData::instantiate() const
+{
+ QPluginLoader loader(m_fileName);
+ const auto ret = loader.instance();
+ if (!ret) {
+ qCWarning(KCOREADDONS_DEBUG) << "Could not create plugin" << name() << "error:" << loader.errorString();
+ }
+ return ret;
+}
+
+template<class T>
+QVariantList listToVariant(const QList<T> &values)
+{
+ QVariantList ret;
+ ret.reserve(values.count());
+ for (const auto &license : values) {
+ ret << QVariant::fromValue(license);
+ }
+ return ret;
+}
+
+QVariantList KPluginMetaData::authorsVariant() const
+{
+ return listToVariant(authors());
+}
+
+QVariantList KPluginMetaData::translatorsVariant() const
+{
+ return listToVariant(translators());
+}
+
+QVariantList KPluginMetaData::otherContributorsVariant() const
+{
+ return listToVariant(otherContributors());
+}
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KPLUGINMETADATA_H
+#define KPLUGINMETADATA_H
+
+#include "kcoreaddons_export.h"
+
+#include <QExplicitlySharedDataPointer>
+#include <QJsonObject>
+#include <QMetaType>
+#include <QString>
+#include <QStringList>
+
+#include <functional>
+
+class KPluginLoader;
+class QPluginLoader;
+class KPluginMetaDataPrivate;
+class KAboutPerson;
+class QObject;
+
+/**
+ * @class KPluginMetaData kpluginmetadata.h KPluginMetaData
+ *
+ * This class allows easily accessing some standardized values from the JSON metadata that
+ * can be embedded into Qt plugins. Additional plugin-specific metadata can be retrieved by
+ * directly reading from the QJsonObject returned by KPluginMetaData::rawData().
+ *
+ * This class can be used instead of KPluginInfo from KService for applications that only load
+ * Qt C++ plugins.
+ *
+ * The following keys will be read from an object "KPlugin" inside the metadata JSON:
+ *
+ * Key | Accessor function | JSON Type
+ * -------------------| -------------------- | ---------------------
+ * Name | name() | string
+ * Description | description() | string
+ * ExtraInformation | extraInformation() | string
+ * Icon | iconName() | string
+ * Authors | authors() | object array (KAboutPerson)
+ * Category | category() | string
+ * License | license() | string
+ * Copyright | copyrightText() | string
+ * Id | pluginId() | string
+ * Version | version() | string
+ * Website | website() | string
+ * EnabledByDefault | isEnabledByDefault() | bool
+ * ServiceTypes | serviceTypes() | string array
+ * MimeTypes | mimeTypes() | string array
+ * FormFactors | formFactors() | string array
+ * Translators | translators() | object array (KAboutPerson)
+ * OtherContributors | otherContributors() | object array (KAboutPerson)
+ *
+ * The Authors, Translators and OtherContributors keys are expected to be
+ * list of objects that match the structure expected by KAboutPerson::fromJSON().
+ *
+ * An example metadata json file could look like this:
+ * @verbatim
+ {
+ "KPlugin": {
+ "Name": "Date and Time",
+ "Description": "Date and time by timezone",
+ "Icon": "preferences-system-time",
+ "Authors": { "Name": "Aaron Seigo", "Email": "aseigo@kde.org" },
+ "Category": "Date and Time",
+ "EnabledByDefault": "true",
+ "License": "LGPL",
+ "Id": "time",
+ "Version": "1.0",
+ "Website": "https://plasma.kde.org/"
+ }
+ }
+ @endverbatim
+ *
+ * @sa KAboutPerson::fromJSON()
+ * @since 5.1
+ */
+class KCOREADDONS_EXPORT KPluginMetaData
+{
+ Q_GADGET
+ Q_PROPERTY(bool isValid READ isValid CONSTANT)
+ Q_PROPERTY(bool isHidden READ isHidden CONSTANT)
+ Q_PROPERTY(QString fileName READ fileName CONSTANT)
+ Q_PROPERTY(QString metaDataFileName READ metaDataFileName CONSTANT)
+ Q_PROPERTY(QJsonObject rawData READ rawData CONSTANT)
+ Q_PROPERTY(QString name READ name CONSTANT)
+ Q_PROPERTY(QString description READ description CONSTANT)
+ Q_PROPERTY(QString extraInformation READ extraInformation CONSTANT)
+ Q_PROPERTY(QVariantList authors READ authorsVariant CONSTANT)
+ Q_PROPERTY(QVariantList translators READ translatorsVariant CONSTANT)
+ Q_PROPERTY(QVariantList otherContributors READ otherContributorsVariant CONSTANT)
+ Q_PROPERTY(QString category READ category CONSTANT)
+ Q_PROPERTY(QString iconName READ iconName CONSTANT)
+ Q_PROPERTY(QString license READ license CONSTANT)
+ Q_PROPERTY(QString licenseText READ licenseText CONSTANT)
+ Q_PROPERTY(QString copyrightText READ copyrightText CONSTANT)
+ Q_PROPERTY(QString pluginId READ pluginId CONSTANT)
+ Q_PROPERTY(QString version READ version CONSTANT)
+ Q_PROPERTY(QString website READ website CONSTANT)
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 79)
+ Q_PROPERTY(QStringList dependencies READ dependencies CONSTANT)
+#endif
+ Q_PROPERTY(QStringList serviceTypes READ serviceTypes CONSTANT)
+ Q_PROPERTY(QStringList mimeTypes READ mimeTypes CONSTANT)
+ Q_PROPERTY(QStringList formFactors READ formFactors CONSTANT)
+ Q_PROPERTY(bool isEnabledByDefault READ isEnabledByDefault CONSTANT)
+ Q_PROPERTY(int initialPreference READ isEnabledByDefault CONSTANT)
+
+public:
+ /** Creates an invalid KPluginMetaData instance */
+ KPluginMetaData();
+
+ /**
+ * Reads the plugin metadata from a KPluginLoader instance. You must call KPluginLoader::setFileName()
+ * or use the appropriate constructor on @p loader before calling this.
+ */
+ KPluginMetaData(const KPluginLoader &loader);
+
+ /**
+ * Reads the plugin metadata from a QPluginLoader instance. You must call QPluginLoader::setFileName()
+ * or use the appropriate constructor on @p loader before calling this.
+ */
+ KPluginMetaData(const QPluginLoader &loader);
+
+ /**
+ * Reads the plugin metadata from a plugin or .desktop which can be loaded from @p file.
+ *
+ * For plugins, platform-specific library suffixes may be omitted since @p file will be resolved
+ * using the same logic as QPluginLoader.
+ *
+ * If the file name ends with ".desktop", the .desktop file will be parsed instead of
+ * reading the metadata from the QPluginLoader. This is the same as calling
+ * KPluginMetaData::fromDesktopFile() without the serviceTypes parameter.
+ *
+ * If @p file ends with .json, the file will be loaded as the QJsonObject metadata.
+ *
+ * @see QPluginLoader::setFileName()
+ * @see KPluginMetaData::fromDesktopFile()
+ */
+ KPluginMetaData(const QString &file);
+
+ /**
+ * Creates a KPluginMetaData from a QJsonObject holding the metadata and a file name
+ * This can be used if the data is not retrieved from a Qt C++ plugin library but from some
+ * other source.
+ * @see KPluginMetaData(const QJsonObject &, const QString &, const QString &)
+ */
+ KPluginMetaData(const QJsonObject &metaData, const QString &file);
+
+ // TODO: KF6: merge with the above and make metaDataFile default to QString()
+ /**
+ * Creates a KPluginMetaData
+ * @param metaData the JSON metadata to use for this object
+ * @param pluginFile the file that the plugin can be loaded from
+ * @param metaDataFile the file that the JSON metadata was read from
+ *
+ * This can be used if the data is not retrieved from a Qt C++ plugin library but from some
+ * other source.
+ *
+ * @since 5.5
+ */
+ KPluginMetaData(const QJsonObject &metaData, const QString &pluginFile, const QString &metaDataFile);
+
+ /**
+ * Copy contructor
+ */
+ KPluginMetaData(const KPluginMetaData &);
+ /**
+ * Copy assignment
+ */
+ KPluginMetaData &operator=(const KPluginMetaData &);
+ /**
+ * Destructor
+ */
+ ~KPluginMetaData();
+
+ /**
+ * Load a KPluginMetaData instace from a .desktop file. Unlike the constructor which takes
+ * a single file parameter this method allows you to specify which service type files should
+ * be parsed to determine the correct type for a given .desktop property.
+ * This ensures that a e.g. comma-separated string list field in the .desktop file will correctly
+ * be converted to a JSON string array.
+ *
+ * @note This function mostly exists for backwards-compatibility. It is recommended
+ * that new applications load JSON files directly instead of using .desktop files for plugin metadata.
+ *
+ * @param file the .desktop file to load
+ * @param serviceTypes a list of files to parse If one of these paths is a relative path it
+ * will be resolved relative to the "kservicetypes5" subdirectory in QStandardPaths::GenericDataLocation.
+ * If the list is empty only the default set of properties will be treated specially and all other entries
+ * will be read as the JSON string type.
+ *
+ * @since 5.16
+ */
+ static KPluginMetaData fromDesktopFile(const QString &file, const QStringList &serviceTypes = QStringList());
+
+ /**
+ * @param directory The directory to search for plugins. If a relative path is given for @p directory,
+ * all entries of QCoreApplication::libraryPaths() will be checked with @p directory appended as a
+ * subdirectory. If an absolute path is given only that directory will be searched.
+ * @note Check if the returned KPluginMetaData is valid before continuing to use it.
+ *
+ * @param pluginId The Id of the plugin. The id should be the same as the filename, see KPluginMetaData::pluginId().
+ * @since 5.84
+ */
+ static KPluginMetaData findPluginById(const QString &directory, const QString &pluginId);
+
+ /**
+ * @return whether this object holds valid information about a plugin.
+ * If this is @c true pluginId() will return a non-empty string.
+ */
+ bool isValid() const;
+
+ /**
+ * @return whether this object should be hidden, this is usually not used for binary
+ * plugins, when loading a KPluginMetaData from a .desktop file, this will reflect
+ * the value of the "Hidden" key.
+ *
+ * @since 5.8
+ */
+ bool isHidden() const;
+
+ /**
+ * @return the path to the plugin. This string can be passed to the KPluginLoader
+ * or QPluginLoader constructors in order to attempt to load this plugin.
+ * @note It is not guaranteed that this is a valid path to a shared library (i.e. loadable
+ * by QPluginLoader) since the metadata could also refer to a non-C++ plugin.
+ */
+ QString fileName() const;
+
+ /**
+ * @return the file that the metadata was read from. This is not necessarily the same as
+ * fileName(), since not all plugins have the metadata embedded. The metadata could also be
+ * stored in a separate .desktop file.
+ *
+ * @since 5.5
+ */
+ QString metaDataFileName() const;
+
+ /**
+ * @return the full metadata stored inside the plugin file.
+ */
+ QJsonObject rawData() const;
+
+ /**
+ * Tries to instantiate this plugin using KPluginMetaData::fileName().
+ * @note The value of KPluginMetaData::dependencies() is not used here, dependencies must be
+ * resolved manually.
+ *
+ * @return The plugin root object or @c nullptr if it could not be loaded
+ * @see QPluginLoader::instance(), KPluginLoader::instance()
+ */
+ QObject *instantiate() const;
+
+ /**
+ * @return the user visible name of the plugin.
+ */
+ QString name() const;
+
+ /**
+ * @return a short description of the plugin.
+ */
+ QString description() const;
+
+ /**
+ * @return additional information about this plugin (e.g. for use in an "about plugin" dialog)
+ *
+ * @since 5.18
+ */
+ QString extraInformation() const;
+
+ /**
+ * @return the author(s) of this plugin.
+ */
+ QList<KAboutPerson> authors() const;
+
+ /**
+ * @return the translator(s) of this plugin.
+ *
+ * @since 5.18
+ */
+ QList<KAboutPerson> translators() const;
+
+ /**
+ * @return a list of people that contributed to this plugin (other than the authors and translators).
+ *
+ * @since 5.18
+ */
+ QList<KAboutPerson> otherContributors() const;
+
+ /**
+ * @return the categories of this plugin (e.g. "playlist/skin").
+ */
+ QString category() const;
+
+ /**
+ * @return the icon name for this plugin
+ * @see QIcon::fromTheme()
+ */
+ QString iconName() const;
+
+ /**
+ * @return the short license identifier (e.g. LGPL).
+ * @see KAboutLicense::byKeyword() for retrieving the full license information
+ */
+ QString license() const;
+
+ /**
+ * @return the text of the license, equivalent to KAboutLicense::byKeyword(license()).text()
+ * @since 5.73
+ */
+ QString licenseText() const;
+
+ /**
+ * @return a short copyright statement
+ *
+ * @since 5.18
+ */
+ QString copyrightText() const;
+
+ /**
+ * @return the internal name of the plugin
+ * If the Id property is not set in the metadata, this will return the
+ * plugin file name without the file extension.
+ */
+ QString pluginId() const;
+
+ /**
+ * @return the version of the plugin.
+ */
+ QString version() const;
+
+ /**
+ * @return the website of the plugin.
+ */
+ QString website() const;
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 79)
+ /**
+ * @return a list of plugins that this plugin depends on so that it can function properly
+ * @see KJsonPluginInfo::pluginId()
+ * @deprecated Since 5.79, plugin dependencies are deprecated and will be removed in KF6
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 79, "Plugin dependencies are deprecated and will be removed in KF6")
+ QStringList dependencies() const;
+#endif
+
+ /**
+ * Returns the service types that this plugin implements.
+ *
+ * This is mostly for historical / compatibility purposes.
+ * As a general rule, instead of opening many plugins to then filter by servicetype,
+ * put all plugins of the same type in a subdirectory, that you can pass to findPlugins directly.
+ * No point in opening 20 plugins to pick out only 3, when the filesystem can do that filtering for you.
+ *
+ * @note Unlike KService this does not contain the MIME types. To get the handled MIME types
+ * use the KPluginMetaData::mimeTypes() function.
+ * @return a list of service types this plugin implements (e.g. "Plasma/DataEngine")
+ */
+ QStringList serviceTypes() const;
+
+ /**
+ * @return a list of MIME types this plugin can handle (e.g. "application/pdf", "image/png", etc.)
+ * @since 5.16
+ */
+ QStringList mimeTypes() const;
+
+ /**
+ * @return true if this plugin can handle the given mimetype
+ * This is more accurate than mimeTypes().contains(mimeType) because it also
+ * takes MIME type inheritance into account.
+ * @since 5.66
+ */
+ bool supportsMimeType(const QString &mimeType) const;
+
+ /**
+ * @return A string list of formfactors this plugin is useful for, e.g. desktop, tablet,
+ * handset, mediacenter, etc.
+ * The keys for this are not formally defined.
+ *
+ * @since 5.12
+ */
+ QStringList formFactors() const;
+
+ /**
+ * @return whether the plugin should be enabled by default.
+ * This is only a recommendation, applications can ignore this value if they want to.
+ */
+ bool isEnabledByDefault() const;
+
+ /**
+ * @return the initial preference of the plugin.
+ * This is the preference to associate with this plugin initially (before
+ * the user has had any chance to define preferences for it).
+ * Higher values indicate stronger preference.
+ * @since 5.67
+ */
+ int initialPreference() const;
+
+ /**
+ * @return the value for @p key from the metadata or @p defaultValue if the key does not exist
+ * or the value for @p key is not of type string
+ *
+ * @see KPluginMetaData::rawData() if QString is not the correct type for @p key
+ */
+ QString value(const QString &key, const QString &defaultValue = QString()) const;
+
+ /** @return the value for @p key inside @p jo as a string list. If the type of @p key is string, a list with containing
+ * just that string will be returned, if it is an array the list will contain one entry for each array member.
+ * If the key cannot be found an empty list will be returned.
+ */
+ static QStringList readStringList(const QJsonObject &jo, const QString &key);
+
+ /**
+ * Reads a value from @p jo but unlike QJsonObject::value() it allows different entries for each locale
+ * This is done by appending the locale identifier in brackets to the key (e.g. "[de_DE]" or "[es]")
+ * When looking for a key "foo" with German (Germany) locale we will first attempt to read "foo[de_DE]",
+ * if that does not exist "foo[de]", finally falling back to "foo" if that also doesn't exist.
+ * @return the translated value for @p key from @p jo or @p defaultValue if @p key was not found
+ */
+ static QJsonValue readTranslatedValue(const QJsonObject &jo, const QString &key, const QJsonValue &defaultValue = QJsonValue());
+
+ /**
+ * @return the translated value of @p key from @p jo as a string or @p defaultValue if @p key was not found
+ * or the value for @p key is not of type string
+ * @see KPluginMetaData::readTranslatedValue(const QJsonObject &jo, const QString &key)
+ */
+ static QString readTranslatedString(const QJsonObject &jo, const QString &key, const QString &defaultValue = QString());
+
+ /**
+ * @return @c true if this object is equal to @p other, otherwise @c false
+ */
+ bool operator==(const KPluginMetaData &other) const;
+
+ /**
+ * @return @c true if this object is not equal to @p other, otherwise @c false.
+ */
+ inline bool operator!=(const KPluginMetaData &other) const
+ {
+ return !(*this == other);
+ }
+
+private:
+ QJsonObject rootObject() const;
+ void loadFromDesktopFile(const QString &file, const QStringList &serviceTypes);
+
+private:
+ QVariantList authorsVariant() const;
+ QVariantList translatorsVariant() const;
+ QVariantList otherContributorsVariant() const;
+
+ QJsonObject m_metaData;
+ QString m_fileName;
+ QExplicitlySharedDataPointer<KPluginMetaDataPrivate> d; // for future binary compatible extensions
+};
+
+inline uint qHash(const KPluginMetaData &md, uint seed)
+{
+ return qHash(md.pluginId(), seed);
+}
+
+Q_DECLARE_METATYPE(KPluginMetaData)
+
+#endif // KPLUGINMETADATA_H
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1999 Matthias Kalle Dalheimer <kalle@kde.org>
+ SPDX-FileCopyrightText: 2000 Charles Samuels <charles@kde.org>
+ SPDX-FileCopyrightText: 2005 Joseph Wenninger <kde@jowenn.at>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "krandom.h"
+
+#include <stdlib.h>
+#ifdef Q_OS_WIN
+#include <process.h>
+#else // Q_OS_WIN
+#include <unistd.h>
+#endif // Q_OS_WIN
+#include <stdio.h>
+#include <time.h>
+#ifndef Q_OS_WIN
+#include <sys/time.h>
+#endif // Q_OS_WIN
+#include <fcntl.h>
+
+#include <QFile>
+#include <QThread>
+#include <QThreadStorage>
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 72)
+int KRandom::random()
+{
+ static QThreadStorage<bool> initialized_threads;
+ if (!initialized_threads.localData()) {
+ unsigned int seed;
+ initialized_threads.setLocalData(true);
+ QFile urandom(QStringLiteral("/dev/urandom"));
+ bool opened = urandom.open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+ if (!opened || urandom.read(reinterpret_cast<char *>(&seed), sizeof(seed)) != sizeof(seed)) {
+ // silence warnings about use of deprecated qsrand()/qrand()
+ // Porting to QRandomGenerator::global() instead might result in no new seed set for the generator behind qrand()
+ // which then might affect other places indirectly relying on this.
+ // So just keeping the old calls here, as this method is also deprecated and will disappear together with qsrand/qrand.
+ QT_WARNING_PUSH
+ QT_WARNING_DISABLE_CLANG("-Wdeprecated-declarations")
+ QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations")
+ // No /dev/urandom... try something else.
+ qsrand(getpid());
+ seed = qrand() ^ time(nullptr) ^ reinterpret_cast<quintptr>(QThread::currentThread());
+ }
+ qsrand(seed);
+ }
+ return qrand();
+ QT_WARNING_POP
+}
+#endif
+
+QString KRandom::randomString(int length)
+{
+ if (length <= 0) {
+ return QString();
+ }
+
+ QString str;
+ str.resize(length);
+ int i = 0;
+ while (length--) {
+ int r = QRandomGenerator::global()->bounded(62);
+ r += 48;
+ if (r > 57) {
+ r += 7;
+ }
+ if (r > 90) {
+ r += 6;
+ }
+ str[i++] = QLatin1Char(char(r));
+ // so what if I work backwards?
+ }
+ return str;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1999 Matthias Kalle Dalheimer <kalle@kde.org>
+ SPDX-FileCopyrightText: 2000 Charles Samuels <charles@kde.org>
+ SPDX-FileCopyrightText: 2005 Joseph Wenninger <kde@jowenn.at>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KRANDOM_H
+#define KRANDOM_H
+
+#include <kcoreaddons_export.h>
+
+#include <QRandomGenerator>
+#include <QString>
+
+#include <limits>
+
+/**
+ * \headerfile krandom.h <KRandom>
+ *
+ * @short Helper class to create random data
+ *
+ * This namespace provides methods which generate random data.
+ * KRandom is not recommended for serious random-number generation needs,
+ * like cryptography.
+ */
+namespace KRandom
+{
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 72)
+/**
+ * Generates a uniform random number.
+ * @return A random number in the range [0, RAND_MAX). The RNG is seeded
+ * on first use.
+ * @deprecated Since 5.72, use QRandomGenerator::global(). The 1:1 port is bounded(RAND_MAX) but check all the methods that QRandomGenerator provides.
+ */
+KCOREADDONS_EXPORT
+KCOREADDONS_DEPRECATED_VERSION(
+ 5,
+ 72,
+ "Use QRandomGenerator::global(). The 1:1 port is bounded(RAND_MAX) but check see all the methods that QRandomGenerator provides.")
+int random();
+#endif
+
+/**
+ * Generates a random string. It operates in the range [A-Za-z0-9]
+ * @param length Generate a string of this length.
+ * @return the random string
+ */
+KCOREADDONS_EXPORT QString randomString(int length);
+
+/**
+ * Reorders the elements of the given container randomly using the given random number generator.
+ *
+ * The container needs to implement size() and T &operator[]
+ *
+ * @since 5.73
+ */
+template<typename T>
+void shuffle(T &container, QRandomGenerator *generator)
+{
+ Q_ASSERT(container.size() <= std::numeric_limits<int>::max());
+ // Fisher-Yates algorithm
+ for (int index = container.size() - 1; index > 0; --index) {
+ const int swapIndex = generator->bounded(index + 1);
+ qSwap(container[index], container[swapIndex]);
+ }
+}
+
+/**
+ * Reorders the elements of the given container randomly.
+ *
+ * The container needs to implement size() and T &operator[]
+ *
+ * @since 5.73
+ */
+template<typename T>
+void shuffle(T &container)
+{
+ shuffle(container, QRandomGenerator::global());
+}
+
+}
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1999 Sean Harmer <sh@astro.keele.ac.uk>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "krandomsequence.h"
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 75)
+
+#include <QRandomGenerator>
+#include <QSharedData>
+
+class KRandomSequencePrivate : public QSharedData
+{
+public:
+ enum {
+ SHUFFLE_TABLE_SIZE = 32,
+ };
+
+ void draw(); // Generate the random number
+
+ int lngSeed1;
+ int lngSeed2;
+ int lngShufflePos;
+ int shuffleArray[SHUFFLE_TABLE_SIZE];
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// Construction / Destruction
+//////////////////////////////////////////////////////////////////////////////
+
+KRandomSequence::KRandomSequence(long lngSeed1)
+ : d(new KRandomSequencePrivate)
+{
+ // Seed the generator
+ setSeed(lngSeed1);
+}
+
+KRandomSequence::KRandomSequence(int lngSeed1)
+ : d(new KRandomSequencePrivate)
+{
+ // Seed the generator
+ setSeed(lngSeed1);
+}
+
+KRandomSequence::~KRandomSequence() = default;
+
+KRandomSequence::KRandomSequence(const KRandomSequence &a) = default;
+
+KRandomSequence &KRandomSequence::operator=(const KRandomSequence &a) = default;
+
+//////////////////////////////////////////////////////////////////////////////
+// Member Functions
+//////////////////////////////////////////////////////////////////////////////
+void KRandomSequence::setSeed(long lngSeed1)
+{
+ setSeed(static_cast<int>(lngSeed1));
+}
+
+void KRandomSequence::setSeed(int lngSeed1)
+{
+ // Convert the positive seed number to a negative one so that the draw()
+ // function can initialise itself the first time it is called. We just have
+ // to make sure that the seed used != 0 as zero perpetuates itself in a
+ // sequence of random numbers.
+ if (lngSeed1 < 0) {
+ d->lngSeed1 = -1;
+ } else if (lngSeed1 == 0) {
+ d->lngSeed1 = -((QRandomGenerator::global()->bounded(RAND_MAX) & ~1) + 1);
+ } else {
+ d->lngSeed1 = -lngSeed1;
+ }
+}
+
+static const int sMod1 = 2147483563;
+static const int sMod2 = 2147483399;
+
+void KRandomSequencePrivate::draw()
+{
+ static const int sMM1 = sMod1 - 1;
+ static const int sA1 = 40014;
+ static const int sA2 = 40692;
+ static const int sQ1 = 53668;
+ static const int sQ2 = 52774;
+ static const int sR1 = 12211;
+ static const int sR2 = 3791;
+ static const int sDiv = 1 + sMM1 / SHUFFLE_TABLE_SIZE;
+
+ // Long period (>2 * 10^18) random number generator of L'Ecuyer with
+ // Bayes-Durham shuffle and added safeguards. Returns a uniform random
+ // deviate between 0.0 and 1.0 (exclusive of the endpoint values). Call
+ // with a negative number to initialize; thereafter, do not alter idum
+ // between successive deviates in a sequence. RNMX should approximate
+ // the largest floating point value that is less than 1.
+
+ int j; // Index for the shuffle table
+ int k;
+
+ // Initialise
+ if (lngSeed1 <= 0) {
+ lngSeed2 = lngSeed1;
+
+ // Load the shuffle table after 8 warm-ups
+ for (j = SHUFFLE_TABLE_SIZE + 7; j >= 0; --j) {
+ k = lngSeed1 / sQ1;
+ lngSeed1 = sA1 * (lngSeed1 - k * sQ1) - k * sR1;
+ if (lngSeed1 < 0) {
+ lngSeed1 += sMod1;
+ }
+
+ if (j < SHUFFLE_TABLE_SIZE) {
+ shuffleArray[j] = lngSeed1;
+ }
+ }
+
+ lngShufflePos = shuffleArray[0];
+ }
+
+ // Start here when not initializing
+
+ // Compute lngSeed1 = ( lngIA1*lngSeed1 ) % lngIM1 without overflows
+ // by Schrage's method
+ k = lngSeed1 / sQ1;
+ lngSeed1 = sA1 * (lngSeed1 - k * sQ1) - k * sR1;
+ if (lngSeed1 < 0) {
+ lngSeed1 += sMod1;
+ }
+
+ // Compute lngSeed2 = ( lngIA2*lngSeed2 ) % lngIM2 without overflows
+ // by Schrage's method
+ k = lngSeed2 / sQ2;
+ lngSeed2 = sA2 * (lngSeed2 - k * sQ2) - k * sR2;
+ if (lngSeed2 < 0) {
+ lngSeed2 += sMod2;
+ }
+
+ j = lngShufflePos / sDiv;
+ lngShufflePos = shuffleArray[j] - lngSeed2;
+ shuffleArray[j] = lngSeed1;
+
+ if (lngShufflePos < 1) {
+ lngShufflePos += sMM1;
+ }
+}
+
+void KRandomSequence::modulate(int i)
+{
+ d->lngSeed2 -= i;
+ if (d->lngSeed2 < 0) {
+ d->lngShufflePos += sMod2;
+ }
+ d->draw();
+ d->lngSeed1 -= i;
+ if (d->lngSeed1 < 0) {
+ d->lngSeed1 += sMod1;
+ }
+ d->draw();
+}
+
+double KRandomSequence::getDouble()
+{
+ static const double finalAmp = 1.0 / double(sMod1);
+ static const double epsilon = 1.2E-7;
+ static const double maxRand = 1.0 - epsilon;
+ double temp;
+ d->draw();
+ // Return a value that is not one of the endpoints
+ if ((temp = finalAmp * d->lngShufflePos) > maxRand) {
+ // We don't want to return 1.0
+ return maxRand;
+ } else {
+ return temp;
+ }
+}
+
+unsigned long KRandomSequence::getLong(unsigned long max)
+{
+ return getInt(static_cast<int>(max));
+}
+
+unsigned int KRandomSequence::getInt(unsigned int max)
+{
+ d->draw();
+
+ return max ? ((static_cast<unsigned int>(d->lngShufflePos)) % max) : 0;
+}
+
+bool KRandomSequence::getBool()
+{
+ d->draw();
+
+ return ((static_cast<unsigned int>(d->lngShufflePos)) & 1);
+}
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1999 Sean Harmer <sh@astro.keele.ac.uk>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef K_RANDOM_SEQUENCE_H
+#define K_RANDOM_SEQUENCE_H
+
+#include <kcoreaddons_export.h>
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 75)
+
+#include <QList>
+#include <QSharedDataPointer>
+
+/**
+ * \class KRandomSequence krandomsequence.h <KRandomSequence>
+ *
+ * A class to create a pseudo-random sequence
+ *
+ * Given a seed number, this class will produce a sequence of
+ * pseudo-random numbers. This would typically be used in
+ * applications like games.
+ *
+ * In general, you should instantiate a KRandomSequence object and
+ * pass along your seed number in the constructor. From then on,
+ * simply call getDouble or getLong to obtain the next
+ * number in the sequence.
+ *
+ * @author Sean Harmer <sh@astro.keele.ac.uk>
+ *
+ * @deprecated Since 5.75, use QRandomGenerator or KRandom::shuffle
+ */
+class KCOREADDONS_EXPORT KRandomSequence
+{
+public:
+ /**
+ * Creates a pseudo-random sequence based on the seed lngSeed.
+ *
+ * A Pseudo-random sequence is different for each seed but can be
+ * reproduced by starting the sequence with the same seed.
+ *
+ * If you need a single value which needs to be unpredictable,
+ * you need to use QRandomGenerator::global()->generate() instead.
+ *
+ * @param intSeed Seed to initialize the sequence with.
+ * If lngSeed is 0, the sequence is initialized with a value from
+ * [0, RAND_MAX)
+ *
+ * Do not use methods working with long type because on 64-bit
+ * their size is different.
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 75, "Use QRandomGenerator")
+ explicit KRandomSequence(int intSeed = 0);
+ KCOREADDONS_DEPRECATED_VERSION(5, 75, "Use QRandomGenerator")
+ explicit KRandomSequence(long lngSeed);
+
+ /**
+ * Standard destructor
+ */
+ virtual ~KRandomSequence();
+
+ /**
+ * Copy constructor
+ */
+ KRandomSequence(const KRandomSequence &a);
+
+ /**
+ * Assignment
+ */
+ KRandomSequence &operator=(const KRandomSequence &a);
+
+ /**
+ * Restart the sequence based on lngSeed.
+ * @param intSeed Seed to initialize the sequence with.
+ * If lngSeed is 0, the sequence is initialized with a value from
+ * [0, RAND_MAX).
+ */
+ void setSeed(int intSeed = 0);
+ void setSeed(long lngSeed = 0);
+
+ /**
+ * Get the next number from the pseudo-random sequence.
+ *
+ * @return a pseudo-random double value between [0,1)
+ */
+ double getDouble();
+
+ /**
+ * Get the next number from the pseudo-random sequence.
+ *
+ * @return a pseudo-random integer value between [0, max)
+ * with 0 <= max < 1.000.000
+ */
+ unsigned int getInt(unsigned int max);
+ unsigned long getLong(unsigned long max);
+
+ /**
+ * Get a boolean from the pseudo-random sequence.
+ *
+ * @return a boolean which is either true or false
+ */
+ bool getBool();
+
+ /**
+ * Put a list in random order.
+ *
+ * Since kdelibs 4.11, this function uses a more efficient
+ * algorithm (Fisher-Yates). Therefore, the order of the items in
+ * the randomized list is different from the one in earlier
+ * versions if the same seed value is used for the random
+ * sequence.
+ *
+ * @param list the list whose order will be modified
+ * @note modifies the list in place
+ *
+ * @deprecated Since 5.75, use KRandom::shuffle
+ */
+ template<typename T>
+ KCOREADDONS_DEPRECATED_VERSION(5, 75, "Use KRandom::shuffle")
+ void randomize(QList<T> &list)
+ {
+ // Fisher-Yates algorithm
+ for (int index = list.count() - 1; index > 0; --index) {
+ const int swapIndex = getInt(index + 1);
+ qSwap(list[index], list[swapIndex]);
+ }
+ }
+
+ /**
+ * Modulate the random sequence.
+ *
+ * If S(i) is the sequence of numbers that will follow
+ * given the current state after calling modulate(i),
+ * then S(i) != S(j) for i != j and
+ * S(i) == S(j) for i == j.
+ *
+ * This can be useful in game situation where "undo" restores
+ * the state of the random sequence. If the game modulates the
+ * random sequence with the move chosen by the player, the
+ * random sequence will be identical whenever the player "redo"-s
+ * his or hers original move, but different when the player
+ * chooses another move.
+ *
+ * With this scenario "undo" can no longer be used to repeat a
+ * certain move over and over again until the computer reacts
+ * with a favorable response or to predict the response for a
+ * certain move based on the response to another move.
+ * @param i the sequence identified
+ */
+ void modulate(int i);
+
+private:
+ QSharedDataPointer<class KRandomSequencePrivate> d;
+};
+
+#endif
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2017 Forrest Smith <forrestthewoods@gmail.com>
+ SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#include "kfuzzymatcher.h"
+
+#include <QString>
+#include <QStringView>
+#include <QVector>
+
+/**
+ * Custom toLower function which is much faster than
+ * c.toLower() directly
+ */
+static inline constexpr QChar toLower(QChar c)
+{
+ return c.isLower() ? c : c.toLower();
+}
+
+// internal
+// clang-format off
+static bool match_recursive(QStringView::const_iterator pattern,
+ QStringView::const_iterator str,
+ int &outScore,
+ const QStringView::const_iterator strBegin,
+ const QStringView::const_iterator strEnd,
+ const QStringView::const_iterator patternEnd,
+ const uint8_t *srcMatches,
+ uint8_t *matches,
+ int nextMatch,
+ int &totalMatches,
+ int &recursionCount)
+{
+ static constexpr int recursionLimit = 10;
+ // max number of matches allowed, this should be enough
+ static constexpr int maxMatches = 256;
+
+ // Count recursions
+ ++recursionCount;
+ if (recursionCount >= recursionLimit) {
+ return false;
+ }
+
+ // Detect end of strings
+ if (pattern == patternEnd || str == strEnd) {
+ return false;
+ }
+
+ // Recursion params
+ bool recursiveMatch = false;
+ uint8_t bestRecursiveMatches[maxMatches];
+ int bestRecursiveScore = 0;
+
+ // Loop through pattern and str looking for a match
+ bool firstMatch = true;
+ QChar currentPatternChar = toLower(*pattern);
+ // Are we matching in sequence start from start?
+ bool matchingInSequence = true;
+ while (pattern != patternEnd && str != strEnd) {
+ // Found match
+ if (currentPatternChar == toLower(*str)) {
+ // Supplied matches buffer was too short
+ if (nextMatch >= maxMatches) {
+ return false;
+ }
+
+ // "Copy-on-Write" srcMatches into matches
+ if (firstMatch && srcMatches) {
+ memcpy(matches, srcMatches, nextMatch);
+ firstMatch = false;
+ }
+
+ // Recursive call that "skips" this match
+ uint8_t recursiveMatches[maxMatches];
+ int recursiveScore = 0;
+ const auto strNextChar = std::next(str);
+ if (!matchingInSequence && match_recursive(pattern, strNextChar, recursiveScore, strBegin,
+ strEnd, patternEnd, matches, recursiveMatches,
+ nextMatch, totalMatches, recursionCount)) {
+ // Pick best recursive score
+ if (!recursiveMatch || recursiveScore > bestRecursiveScore) {
+ memcpy(bestRecursiveMatches, recursiveMatches, maxMatches);
+ bestRecursiveScore = recursiveScore;
+ }
+ recursiveMatch = true;
+ }
+
+ // Advance
+ matches[nextMatch++] = (uint8_t)(std::distance(strBegin, str));
+ ++pattern;
+ currentPatternChar = toLower(*pattern);
+ } else {
+ matchingInSequence = false;
+ }
+ ++str;
+ }
+
+ // Determine if full pattern was matched
+ const bool matched = pattern == patternEnd;
+
+ // Calculate score
+ if (matched) {
+ static constexpr int sequentialBonus = 25;
+ static constexpr int separatorBonus = 25; // bonus if match occurs after a separator
+ static constexpr int camelBonus = 25; // bonus if match is uppercase and prev is lower
+ static constexpr int firstLetterBonus = 15; // bonus if the first letter is matched
+
+ static constexpr int leadingLetterPenalty = -5; // penalty applied for every letter in str before the first match
+ static constexpr int maxLeadingLetterPenalty = -15; // maximum penalty for leading letters
+ static constexpr int unmatchedLetterPenalty = -1; // penalty for every letter that doesn't matter
+
+ static constexpr int nonBeginSequenceBonus = 10;
+
+ // Initialize score
+ outScore = 100;
+
+ // Apply leading letter penalty
+ const int penalty = std::max(leadingLetterPenalty * matches[0], maxLeadingLetterPenalty);
+
+ outScore += penalty;
+
+ // Apply unmatched penalty
+ const int unmatched = (int)(std::distance(strBegin, strEnd)) - nextMatch;
+ outScore += unmatchedLetterPenalty * unmatched;
+
+ uint8_t seqs[maxMatches] = {0};
+
+ // Apply ordering bonuses
+ int j = 0;
+ for (int i = 0; i < nextMatch; ++i) {
+ const uint8_t currIdx = matches[i];
+
+ if (i > 0) {
+ const uint8_t prevIdx = matches[i - 1];
+
+ // Sequential
+ if (currIdx == (prevIdx + 1)) {
+ if (j > 0 && seqs[j - 1] == i - 1){
+ outScore += sequentialBonus;
+ seqs[j++] = i;
+ } else {
+ // In sequence, but from first char
+ outScore += nonBeginSequenceBonus;
+ }
+ }
+ }
+
+ // Check for bonuses based on neighbor character value
+ if (currIdx > 0) {
+ // Camel case
+ const QChar neighbor = *(strBegin + currIdx - 1);
+ const QChar curr = *(strBegin + currIdx);
+ if (neighbor.isLower() && curr.isUpper()) {
+ outScore += camelBonus;
+ }
+
+ // Separator
+ const bool neighborSeparator = neighbor == QLatin1Char('_') || neighbor == QLatin1Char(' ');
+ if (neighborSeparator) {
+ outScore += separatorBonus;
+ }
+ } else {
+ // First letter
+ outScore += firstLetterBonus;
+ seqs[j++] = i;
+ }
+ }
+ }
+
+ totalMatches = nextMatch;
+
+ // Return best result
+ if (recursiveMatch && (!matched || bestRecursiveScore > outScore)) {
+ // Recursive score is better than "this"
+ memcpy(matches, bestRecursiveMatches, maxMatches);
+ outScore = bestRecursiveScore;
+ return true;
+ } else if (matched) {
+ // "this" score is better than recursive
+ return true;
+ } else {
+ // no match
+ return false;
+ }
+}
+// clang-format on
+
+static bool match_internal(QStringView pattern, QStringView str, int &outScore, unsigned char *matches)
+{
+ if (pattern.isEmpty()) {
+ return true;
+ }
+
+ int recursionCount = 0;
+
+ auto strIt = str.cbegin();
+ auto patternIt = pattern.cbegin();
+ const auto patternEnd = pattern.cend();
+ const auto strEnd = str.cend();
+
+ int total = 0;
+ return match_recursive(patternIt, strIt, outScore, strIt, strEnd, patternEnd, nullptr, matches, 0, total, recursionCount);
+}
+
+/**************************************************************/
+
+bool KFuzzyMatcher::matchSimple(QStringView pattern, QStringView str)
+{
+ auto patternIt = pattern.cbegin();
+ /**
+ * Instead of doing
+ *
+ * strIt.toLower() == patternIt.toLower()
+ *
+ * we convert patternIt to Upper / Lower as needed and compare with strIt. This
+ * saves us from calling toLower() on both strings, making things a little bit faster
+ */
+ bool lower = patternIt->isLower();
+ QChar cUp = lower ? patternIt->toUpper() : *patternIt;
+ QChar cLow = lower ? *patternIt : patternIt->toLower();
+ for (auto strIt = str.cbegin(); strIt != str.cend() && patternIt != pattern.cend(); ++strIt) {
+ if (*strIt == cLow || *strIt == cUp) {
+ ++patternIt;
+ lower = patternIt->isLower();
+ cUp = lower ? patternIt->toUpper() : *patternIt;
+ cLow = lower ? *patternIt : patternIt->toLower();
+ }
+ }
+
+ return patternIt == pattern.cend();
+}
+
+KFuzzyMatcher::Result KFuzzyMatcher::match(QStringView pattern, QStringView str)
+{
+ /**
+ * Simple substring matching to flush out non-matching strings
+ */
+ const bool simpleMatch = matchSimple(pattern, str);
+
+ KFuzzyMatcher::Result result;
+ result.matched = false;
+ result.score = 0;
+
+ if (!simpleMatch) {
+ return result;
+ }
+
+ // actual algorithm
+ int score = 0;
+ uint8_t matches[256];
+ const bool matched = match_internal(pattern, str, score, matches);
+ result.matched = matched;
+ result.score = score;
+ return result;
+}
+
+QVector<KFuzzyMatcher::Range> KFuzzyMatcher::matchedRanges(QStringView pattern, QStringView str, RangeType type)
+{
+ QVector<KFuzzyMatcher::Range> ranges;
+ if (pattern.isEmpty()) {
+ return ranges;
+ }
+
+ int totalMatches = 0;
+ int score = 0;
+ int recursionCount = 0;
+
+ auto strIt = str.cbegin();
+ auto patternIt = pattern.cbegin();
+ const auto patternEnd = pattern.cend();
+ const auto strEnd = str.cend();
+
+ uint8_t matches[256];
+ auto res = match_recursive(patternIt, strIt, score, strIt, strEnd, patternEnd, nullptr, matches, 0, totalMatches, recursionCount);
+ // didn't match? => We don't care about results
+ if (!res && type == RangeType::FullyMatched) {
+ return {};
+ }
+
+ int previousMatch = 0;
+ for (int i = 0; i < totalMatches; ++i) {
+ auto matchPos = matches[i];
+ /**
+ * Check if this match is part of the previous
+ * match. If it is, we increase the length of
+ * the last range.
+ */
+ if (!ranges.isEmpty() && matchPos == previousMatch + 1) {
+ ranges.last().length++;
+ } else {
+ /**
+ * This is a new match inside the string
+ */
+ ranges.push_back({/* start: */ matchPos, /* length: */ 1});
+ }
+ previousMatch = matchPos;
+ }
+
+ return ranges;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2017 Forrest Smith <forrestthewoods@gmail.com>
+ SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#ifndef KFUZZYMATCHER_H
+#define KFUZZYMATCHER_H
+
+#include <kcoreaddons_export.h>
+
+class QString;
+class QStringView;
+template<typename T>
+class QVector;
+
+/**
+ * This namespace contains functions for fuzzy matching a list of strings
+ * against a pattern.
+ *
+ * This code is ported to Qt from lib_fts:
+ * https://github.com/forrestthewoods/lib_fts
+ * which tries to replicate SublimeText like fuzzy matching.
+ *
+ * @note
+ * All character matches will happen sequentially. That means that this function is not
+ * typo tolerant i.e., "gti" will not match "git", but "gt" will. All methods in here are
+ * stateless i.e., the input string will not be modified. Also note that strings in all the
+ * functions in this namespace will be matched case-insensitively.
+ *
+ * Limitations:
+ * - Currently this will match only strings with length < 256 correctly. This is because we
+ * intend on matching a pattern against words / short strings and not paragraphs.
+ * - No more than 256 matches will happen.
+ *
+ * If you are using this with @c QSortFilterProxyModel, you need to override both
+ * @c QSortFilterProxyModel::lessThan and @c QSortFilterProxyModel::filterAcceptsRow.
+ * A simple example:
+ *
+ * \code
+ bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
+ {
+ int score = 0;
+ const auto idx = sourceModel()->index(sourceRow, 0, sourceParent);
+ const auto actionName = idx.data().toString().splitRef(QLatin1Char(':')).at(1);
+ const bool res = kfts::fuzzy_match_sequential(m_pattern, actionName, score);
+ // store the score in the source model
+ sourceModel()->setData(idx, score, ScoreRole);
+ return res;
+ }
+
+ bool lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const override
+ {
+ // use the score here to sort
+ const int l = sourceLeft.data(ScoreRole).toInt();
+ const int r = sourceRight.data(ScoreRole).toInt();
+ return l < r;
+ }
+ * \endcode
+ *
+ * Additionally you must not use @c invalidateFilter() if you go with the above approach. Instead
+ * use @c beginResetModel()/@c endResetModel():
+ *
+ * \code
+ * Q_SLOT void setFilterString(const QString &string)
+ {
+ beginResetModel();
+ m_pattern = string;
+ endResetModel();
+ }
+ * \endcode
+ *
+ * @short Namespace for fuzzy matching of strings
+ * @author Waqar Ahmed <waqar.17a@gmail.com>
+ */
+namespace KFuzzyMatcher
+{
+/**
+ * @brief The result of a fuzzy match
+ */
+struct KCOREADDONS_EXPORT Result {
+ /**
+ * Score of this match. This can be negative.if matched is @c false
+ * then the score will be zero.
+ */
+ int score = 0;
+ /** @c true if match was successful */
+ bool matched = false;
+};
+
+/**
+ * @brief A range representing a matched sequence in a string
+ *
+ * @since 5.84
+ */
+struct KCOREADDONS_EXPORT Range {
+ int start;
+ int length;
+};
+
+/**
+ * @brief The type of matches to consider when requesting for ranges.
+ * @see matchedRanges
+ *
+ * @since 5.84
+ */
+enum class RangeType : unsigned char {
+ /**
+ * We want ranges only where the pattern fully matches the user
+ * supplied string
+ */
+ FullyMatched,
+ /**
+ * We want ranges for all matches, even if the pattern partially
+ * matched the user supplied string
+ */
+ All
+};
+
+/**
+ * @brief Simple fuzzy matching of chars in @p pattern with chars in @p str
+ * sequentially. If there is a match, it will return true and false otherwise.
+ * There is no scoring. You should use this if score is not important for you
+ * and only matching is important.
+ *
+ * If @p pattern is empty, the function will return @c true
+ *
+ * @param pattern to search for. For e.g., text entered by a user to filter a
+ * list
+ * @param str the current string from your list of strings
+ * @return @c true on sucessful match
+ *
+ * @since 5.79
+ */
+KCOREADDONS_EXPORT bool matchSimple(QStringView pattern, QStringView str);
+
+/**
+ * @brief This is the main function which does scored fuzzy matching.
+ *
+ * The return value of this function contains Result#score which should be used to
+ * sort the results. Without sorting of the results this function won't very effective.
+ *
+ * If @p pattern is empty, the function will return @c true
+ *
+ * @param pattern to search for. For e.g., text entered by a user to filter a
+ * list or model
+ * @param str the current string from your list of strings
+ * @return A Result type with score of this match and whether the match was
+ * successful. If there is no match, score is zero. If the match is successful,
+ * score must be used to sort the results.
+ *
+ * @since 5.79
+ */
+KCOREADDONS_EXPORT Result match(QStringView pattern, QStringView str);
+
+/**
+ * @brief A function which returns the positions + lengths where the @p pattern matched
+ * inside the @p str. The resulting ranges can then be utilized to show the user where
+ * the matches occurred. Example:
+ *
+ * @code
+ * String: hello
+ * Pattern: Hlo
+ *
+ * Output: [Range{0, 1}, Range{3, 2}]
+ * @endcode
+ *
+ * In the above example @c "Hlo" matched inside the string @c "hello" in two places i.e.,
+ * position 0 and position 3. At position 0 it matched 'h', and at position 3 it
+ * matched 'lo'.
+ *
+ * The ranges themeselves can't do much so you will have to make the result useful
+ * in your own way. Some possible uses can be:
+ * - Transform the result into a vector of @c QTextLayout::FormatRange and then paint
+ * them in the view
+ * - Use the result to transform the string into html, for example conver the string from
+ * above example to "\<b\>H\</b\>el\<b\>lo\</b\>, and then use @c QTextDocument
+ * to paint it into your view.
+ *
+ * Example with the first method:
+ * @code
+ * auto ranges = KFuzzyMatcher::matchedRanges(pattern, string);
+ * QVector<QTextLayout::FormatRange> out;
+ * std::transform(ranges.begin(), ranges.end(), std::back_inserter(out), [](const KFuzzyMatcher::Range &fr){
+ * return QTextLayout::FormatRange{fr.start, fr.length, QTextCharFormat()};
+ * });
+ *
+ * QTextLayout layout(text, font);
+ * layout.beginLayout();
+ * QTextLine line = layout.createLine();
+ * //...
+ * layout.endLayout();
+ *
+ * layout.setFormats(layout.formats() + out);
+ * layout.draw(painter, position);
+ * @endcode
+ *
+ * If @p pattern is empty, the function will return an empty vector
+ *
+ * if @p type is @c RangeType::All, the function will try to get ranges even if
+ * the pattern didn't fully match. For example:
+ * @code
+ * pattern: "git"
+ * string: "gti"
+ * RangeType: All
+ *
+ * Output: [Range{0, 1}, Range{2, 1}]
+ * @endcode
+ *
+ * @param pattern to search for. For e.g., text entered by a user to filter a
+ * list or model
+ * @param str the current string from your list of strings
+ * @param type whether to consider ranges from full matches only or all matches including partial matches
+ * @return A vector of ranges containing positions and lengths where the pattern
+ * matched. If there was no match, the vector will be empty
+ *
+ * @since 5.84
+ */
+KCOREADDONS_EXPORT QVector<KFuzzyMatcher::Range> matchedRanges(QStringView pattern, QStringView str, RangeType type = RangeType::FullyMatched);
+
+} // namespace KFuzzyMatcher
+
+#endif // KFUZZYMATCHER_H
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2002-2003 Oswald Buddenhagen <ossi@kde.org>
+ SPDX-FileCopyrightText: 2003 Waldo Bastian <bastian@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kmacroexpander_p.h"
+
+#include <QHash>
+
+KMacroExpanderBase::KMacroExpanderBase(QChar c)
+ : d(new KMacroExpanderBasePrivate(c))
+{
+}
+
+KMacroExpanderBase::~KMacroExpanderBase() = default;
+
+void KMacroExpanderBase::setEscapeChar(QChar c)
+{
+ d->escapechar = c;
+}
+
+QChar KMacroExpanderBase::escapeChar() const
+{
+ return d->escapechar;
+}
+
+void KMacroExpanderBase::expandMacros(QString &str)
+{
+ int pos;
+ int len;
+ ushort ec = d->escapechar.unicode();
+ QStringList rst;
+ QString rsts;
+
+ for (pos = 0; pos < str.length();) {
+ if (ec != 0) {
+ if (str.unicode()[pos].unicode() != ec) {
+ goto nohit;
+ }
+ if (!(len = expandEscapedMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ } else {
+ if (!(len = expandPlainMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ }
+ if (len < 0) {
+ pos -= len;
+ continue;
+ }
+ rsts = rst.join(QLatin1Char(' '));
+ rst.clear();
+ str.replace(pos, len, rsts);
+ pos += rsts.length();
+ continue;
+ nohit:
+ pos++;
+ }
+}
+
+bool KMacroExpanderBase::expandMacrosShellQuote(QString &str)
+{
+ int pos = 0;
+ return expandMacrosShellQuote(str, pos) && pos == str.length();
+}
+
+int KMacroExpanderBase::expandPlainMacro(const QString &, int, QStringList &)
+{
+ qFatal("KMacroExpanderBase::expandPlainMacro called!");
+ return 0;
+}
+
+int KMacroExpanderBase::expandEscapedMacro(const QString &, int, QStringList &)
+{
+ qFatal("KMacroExpanderBase::expandEscapedMacro called!");
+ return 0;
+}
+
+//////////////////////////////////////////////////
+
+template<typename KT, typename VT>
+class KMacroMapExpander : public KMacroExpanderBase
+{
+public:
+ KMacroMapExpander(const QHash<KT, VT> &map, QChar c = QLatin1Char('%'))
+ : KMacroExpanderBase(c)
+ , macromap(map)
+ {
+ }
+
+protected:
+ int expandPlainMacro(const QString &str, int pos, QStringList &ret) override;
+ int expandEscapedMacro(const QString &str, int pos, QStringList &ret) override;
+
+private:
+ QHash<KT, VT> macromap;
+};
+
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+static QStringList &operator+=(QStringList &s, const QString &n)
+{
+ s << n;
+ return s;
+}
+#endif
+
+////////
+
+static bool isIdentifier(ushort c)
+{
+ return c == '_' || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9');
+}
+
+////////
+
+template<typename VT>
+class KMacroMapExpander<QChar, VT> : public KMacroExpanderBase
+{
+public:
+ KMacroMapExpander(const QHash<QChar, VT> &map, QChar c = QLatin1Char('%'))
+ : KMacroExpanderBase(c)
+ , macromap(map)
+ {
+ }
+
+protected:
+ int expandPlainMacro(const QString &str, int pos, QStringList &ret) override;
+ int expandEscapedMacro(const QString &str, int pos, QStringList &ret) override;
+
+private:
+ QHash<QChar, VT> macromap;
+};
+
+template<typename VT>
+int KMacroMapExpander<QChar, VT>::expandPlainMacro(const QString &str, int pos, QStringList &ret)
+{
+ typename QHash<QChar, VT>::const_iterator it = macromap.constFind(str.unicode()[pos]);
+ if (it != macromap.constEnd()) {
+ ret += it.value();
+ return 1;
+ }
+ return 0;
+}
+
+template<typename VT>
+int KMacroMapExpander<QChar, VT>::expandEscapedMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (str.length() <= pos + 1) {
+ return 0;
+ }
+
+ if (str.unicode()[pos + 1] == escapeChar()) {
+ ret += QString(escapeChar());
+ return 2;
+ }
+ typename QHash<QChar, VT>::const_iterator it = macromap.constFind(str.unicode()[pos + 1]);
+ if (it != macromap.constEnd()) {
+ ret += it.value();
+ return 2;
+ }
+
+ return 0;
+}
+
+template<typename VT>
+class KMacroMapExpander<QString, VT> : public KMacroExpanderBase
+{
+public:
+ KMacroMapExpander(const QHash<QString, VT> &map, QChar c = QLatin1Char('%'))
+ : KMacroExpanderBase(c)
+ , macromap(map)
+ {
+ }
+
+protected:
+ int expandPlainMacro(const QString &str, int pos, QStringList &ret) override;
+ int expandEscapedMacro(const QString &str, int pos, QStringList &ret) override;
+
+private:
+ QHash<QString, VT> macromap;
+};
+
+template<typename VT>
+int KMacroMapExpander<QString, VT>::expandPlainMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (pos && isIdentifier(str.unicode()[pos - 1].unicode())) {
+ return 0;
+ }
+ int sl;
+ for (sl = 0; isIdentifier(str.unicode()[pos + sl].unicode()); sl++)
+ ;
+ if (!sl) {
+ return 0;
+ }
+ typename QHash<QString, VT>::const_iterator it = macromap.constFind(str.mid(pos, sl));
+ if (it != macromap.constEnd()) {
+ ret += it.value();
+ return sl;
+ }
+ return 0;
+}
+
+template<typename VT>
+int KMacroMapExpander<QString, VT>::expandEscapedMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (str.length() <= pos + 1) {
+ return 0;
+ }
+
+ if (str.unicode()[pos + 1] == escapeChar()) {
+ ret += QString(escapeChar());
+ return 2;
+ }
+ int sl, rsl, rpos;
+ if (str.unicode()[pos + 1].unicode() == '{') {
+ rpos = pos + 2;
+ if ((sl = str.indexOf(QLatin1Char('}'), rpos)) < 0) {
+ return 0;
+ }
+ sl -= rpos;
+ rsl = sl + 3;
+ } else {
+ rpos = pos + 1;
+ for (sl = 0; isIdentifier(str.unicode()[rpos + sl].unicode()); ++sl)
+ ;
+ rsl = sl + 1;
+ }
+ if (!sl) {
+ return 0;
+ }
+ typename QHash<QString, VT>::const_iterator it = macromap.constFind(str.mid(rpos, sl));
+ if (it != macromap.constEnd()) {
+ ret += it.value();
+ return rsl;
+ }
+ return 0;
+}
+
+////////////
+
+int KCharMacroExpander::expandPlainMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (expandMacro(str.unicode()[pos], ret)) {
+ return 1;
+ }
+ return 0;
+}
+
+int KCharMacroExpander::expandEscapedMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (str.length() <= pos + 1) {
+ return 0;
+ }
+
+ if (str.unicode()[pos + 1] == escapeChar()) {
+ ret += QString(escapeChar());
+ return 2;
+ }
+ if (expandMacro(str.unicode()[pos + 1], ret)) {
+ return 2;
+ }
+ return 0;
+}
+
+int KWordMacroExpander::expandPlainMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (pos && isIdentifier(str.unicode()[pos - 1].unicode())) {
+ return 0;
+ }
+ int sl;
+ for (sl = 0; isIdentifier(str.unicode()[pos + sl].unicode()); sl++)
+ ;
+ if (!sl) {
+ return 0;
+ }
+ if (expandMacro(str.mid(pos, sl), ret)) {
+ return sl;
+ }
+ return 0;
+}
+
+int KWordMacroExpander::expandEscapedMacro(const QString &str, int pos, QStringList &ret)
+{
+ if (str.length() <= pos + 1) {
+ return 0;
+ }
+
+ if (str.unicode()[pos + 1] == escapeChar()) {
+ ret += QString(escapeChar());
+ return 2;
+ }
+ int sl, rsl, rpos;
+ if (str.unicode()[pos + 1].unicode() == '{') {
+ rpos = pos + 2;
+ if ((sl = str.indexOf(QLatin1Char('}'), rpos)) < 0) {
+ return 0;
+ }
+ sl -= rpos;
+ rsl = sl + 3;
+ } else {
+ rpos = pos + 1;
+ for (sl = 0; isIdentifier(str.unicode()[rpos + sl].unicode()); ++sl)
+ ;
+ rsl = sl + 1;
+ }
+ if (!sl) {
+ return 0;
+ }
+ if (expandMacro(str.mid(rpos, sl), ret)) {
+ return rsl;
+ }
+ return 0;
+}
+
+////////////
+
+template<typename KT, typename VT>
+inline QString TexpandMacros(const QString &ostr, const QHash<KT, VT> &map, QChar c)
+{
+ QString str(ostr);
+ KMacroMapExpander<KT, VT> kmx(map, c);
+ kmx.expandMacros(str);
+ return str;
+}
+
+template<typename KT, typename VT>
+inline QString TexpandMacrosShellQuote(const QString &ostr, const QHash<KT, VT> &map, QChar c)
+{
+ QString str(ostr);
+ KMacroMapExpander<KT, VT> kmx(map, c);
+ if (!kmx.expandMacrosShellQuote(str)) {
+ return QString();
+ }
+ return str;
+}
+
+// public API
+namespace KMacroExpander
+{
+QString expandMacros(const QString &ostr, const QHash<QChar, QString> &map, QChar c)
+{
+ return TexpandMacros(ostr, map, c);
+}
+QString expandMacrosShellQuote(const QString &ostr, const QHash<QChar, QString> &map, QChar c)
+{
+ return TexpandMacrosShellQuote(ostr, map, c);
+}
+QString expandMacros(const QString &ostr, const QHash<QString, QString> &map, QChar c)
+{
+ return TexpandMacros(ostr, map, c);
+}
+QString expandMacrosShellQuote(const QString &ostr, const QHash<QString, QString> &map, QChar c)
+{
+ return TexpandMacrosShellQuote(ostr, map, c);
+}
+QString expandMacros(const QString &ostr, const QHash<QChar, QStringList> &map, QChar c)
+{
+ return TexpandMacros(ostr, map, c);
+}
+QString expandMacrosShellQuote(const QString &ostr, const QHash<QChar, QStringList> &map, QChar c)
+{
+ return TexpandMacrosShellQuote(ostr, map, c);
+}
+QString expandMacros(const QString &ostr, const QHash<QString, QStringList> &map, QChar c)
+{
+ return TexpandMacros(ostr, map, c);
+}
+QString expandMacrosShellQuote(const QString &ostr, const QHash<QString, QStringList> &map, QChar c)
+{
+ return TexpandMacrosShellQuote(ostr, map, c);
+}
+
+} // namespace
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2002-2003 Oswald Buddenhagen <ossi@kde.org>
+ SPDX-FileCopyrightText: 2003 Waldo Bastian <bastian@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#ifndef KMACROEXPANDER_H
+#define KMACROEXPANDER_H
+
+#include <QChar>
+#include <QStringList>
+
+#include <kcoreaddons_export.h>
+#include <memory>
+
+class QString;
+template<typename KT, typename VT>
+class QHash;
+class KMacroExpanderBasePrivate;
+
+/**
+ * \class KMacroExpanderBase kmacroexpander.h <KMacroExpanderBase>
+ *
+ * Abstract base class for the worker classes behind the KMacroExpander namespace
+ * and the KCharMacroExpander and KWordMacroExpander classes.
+ *
+ * @author Oswald Buddenhagen <ossi@kde.org>
+ */
+class KCOREADDONS_EXPORT KMacroExpanderBase
+{
+public:
+ /**
+ * Constructor.
+ * @param c escape char indicating start of macros, or QChar::null for none
+ */
+ explicit KMacroExpanderBase(QChar c = QLatin1Char('%'));
+
+ /**
+ * Destructor.
+ */
+ virtual ~KMacroExpanderBase();
+
+ /**
+ * Perform safe macro expansion (substitution) on a string.
+ *
+ * @param str the string in which macros are expanded in-place
+ */
+ void expandMacros(QString &str);
+
+ // TODO: This documentation is relevant for end-users. Where to put it?
+ /**
+ * Perform safe macro expansion (substitution) on a string for use
+ * in shell commands.
+ *
+ * <h3>*NIX notes</h3>
+ *
+ * Explicitly supported shell constructs:
+ * \ '' "" $'' $"" {} () $(()) ${} $() ``
+ *
+ * Implicitly supported shell constructs:
+ * (())
+ *
+ * Unsupported shell constructs that will cause problems:
+ * Shortened "<tt>case $v in pat)</tt>" syntax. Use
+ * "<tt>case $v in (pat)</tt>" instead.
+ *
+ * The rest of the shell (incl. bash) syntax is simply ignored,
+ * as it is not expected to cause problems.
+ *
+ * Note that bash contains a bug which makes macro expansion within
+ * double quoted substitutions (<tt>"${VAR:-%macro}"</tt>) inherently
+ * insecure.
+ *
+ * For security reasons, @em never put expandos in command line arguments
+ * that are shell commands by themselves -
+ * "<tt>sh -c 'foo \%f'</tt>" is taboo.
+ * "<tt>file=\%f sh -c 'foo "$file"'</tt>" is OK.
+ *
+ * <h3>Windows notes</h3>
+ *
+ * All quoting syntax supported by KShell is supported here as well.
+ * Additionally, command grouping via parentheses is recognized - note
+ * however, that the parser is much stricter about unquoted parentheses
+ * than cmd itself.
+ * The rest of the cmd syntax is simply ignored, as it is not expected
+ * to cause problems - do not use commands that embed other commands,
+ * though - "<tt>for /f ...</tt>" is taboo.
+ *
+ * @param str the string in which macros are expanded in-place
+ * @param pos the position inside the string at which parsing/substitution
+ * should start, and upon exit where processing stopped
+ * @return false if the string could not be parsed and therefore no safe
+ * substitution was possible. Note that macros will have been processed
+ * up to the point where the error occurred. An unmatched closing paren
+ * or brace outside any shell construct is @em not an error (unlike in
+ * the function below), but still prematurely terminates processing.
+ */
+ bool expandMacrosShellQuote(QString &str, int &pos);
+
+ /**
+ * Same as above, but always starts at position 0, and unmatched closing
+ * parens and braces are treated as errors.
+ */
+ bool expandMacrosShellQuote(QString &str);
+
+ /**
+ * Set the macro escape character.
+ * @param c escape char indicating start of macros, or QChar::null if none
+ */
+ void setEscapeChar(QChar c);
+
+ /**
+ * Obtain the macro escape character.
+ * @return escape char indicating start of macros, or QChar::null if none
+ */
+ QChar escapeChar() const;
+
+protected:
+ /**
+ * This function is called for every single char within the string if
+ * the escape char is QChar::null. It should determine whether the
+ * string starting at @p pos within @p str is a valid macro and return
+ * the substitution value for it if so.
+ * @param str the input string
+ * @param pos the offset within @p str
+ * @param ret return value: the string to substitute for the macro
+ * @return If greater than zero, the number of chars at @p pos in @p str
+ * to substitute with @p ret (i.e., a valid macro was found). If less
+ * than zero, subtract this value from @p pos (to skip a macro, i.e.,
+ * substitute it with itself). If zero, no macro starts at @p pos.
+ */
+ virtual int expandPlainMacro(const QString &str, int pos, QStringList &ret);
+
+ /**
+ * This function is called every time the escape char is found if it is
+ * not QChar::null. It should determine whether the
+ * string starting at @p pos witin @p str is a valid macro and return
+ * the substitution value for it if so.
+ * @param str the input string
+ * @param pos the offset within @p str. Note that this is the position of
+ * the occurrence of the escape char
+ * @param ret return value: the string to substitute for the macro
+ * @return If greater than zero, the number of chars at @p pos in @p str
+ * to substitute with @p ret (i.e., a valid macro was found). If less
+ * than zero, subtract this value from @p pos (to skip a macro, i.e.,
+ * substitute it with itself). If zero, scanning continues as if no
+ * escape char was encountered at all.
+ */
+ virtual int expandEscapedMacro(const QString &str, int pos, QStringList &ret);
+
+private:
+ std::unique_ptr<KMacroExpanderBasePrivate> const d;
+};
+
+/**
+ * \class KWordMacroExpander kmacroexpander.h <KMacroExpanderBase>
+ *
+ * Abstract base class for simple word macro substitutors. Use this instead of
+ * the functions in the KMacroExpander namespace if speculatively pre-filling
+ * the substitution map would be too expensive.
+ *
+ * A typical application:
+ *
+ * \code
+ * class MyClass {
+ * ...
+ * private:
+ * QString m_str;
+ * ...
+ * friend class MyExpander;
+ * };
+ *
+ * class MyExpander : public KWordMacroExpander {
+ * public:
+ * MyExpander( MyClass *_that ) : KWordMacroExpander(), that( _that ) {}
+ * protected:
+ * virtual bool expandMacro( const QString &str, QStringList &ret );
+ * private:
+ * MyClass *that;
+ * };
+ *
+ * bool MyExpander::expandMacro( const QString &str, QStringList &ret )
+ * {
+ * if (str == "macro") {
+ * ret += complexOperation( that->m_str );
+ * return true;
+ * }
+ * return false;
+ * }
+ *
+ * ... MyClass::...(...)
+ * {
+ * QString str;
+ * ...
+ * MyExpander mx( this );
+ * mx.expandMacrosShellQuote( str );
+ * ...
+ * }
+ * \endcode
+ *
+ * Alternatively MyClass could inherit from KWordMacroExpander directly.
+ *
+ * @author Oswald Buddenhagen <ossi@kde.org>
+ */
+class KCOREADDONS_EXPORT KWordMacroExpander : public KMacroExpanderBase
+{
+public:
+ /**
+ * Constructor.
+ * @param c escape char indicating start of macros, or QChar::null for none
+ */
+ explicit KWordMacroExpander(QChar c = QLatin1Char('%'))
+ : KMacroExpanderBase(c)
+ {
+ }
+
+protected:
+ /** \internal Not to be called or reimplemented. */
+ int expandPlainMacro(const QString &str, int pos, QStringList &ret) override;
+ /** \internal Not to be called or reimplemented. */
+ int expandEscapedMacro(const QString &str, int pos, QStringList &ret) override;
+
+ /**
+ * Return substitution list @p ret for string macro @p str.
+ * @param str the macro to expand
+ * @param ret return variable reference. It is guaranteed to be empty
+ * when expandMacro is entered.
+ * @return @c true iff @p chr was a recognized macro name
+ */
+ virtual bool expandMacro(const QString &str, QStringList &ret) = 0;
+};
+
+/**
+ * \class KCharMacroExpander kmacroexpander.h <KMacroExpanderBase>
+ *
+ * Abstract base class for single char macro substitutors. Use this instead of
+ * the functions in the KMacroExpander namespace if speculatively pre-filling
+ * the substitution map would be too expensive.
+ *
+ * See KWordMacroExpander for a sample application.
+ *
+ * @author Oswald Buddenhagen <ossi@kde.org>
+ */
+class KCOREADDONS_EXPORT KCharMacroExpander : public KMacroExpanderBase
+{
+public:
+ /**
+ * Constructor.
+ * @param c escape char indicating start of macros, or QChar::null for none
+ */
+ explicit KCharMacroExpander(QChar c = QLatin1Char('%'))
+ : KMacroExpanderBase(c)
+ {
+ }
+
+protected:
+ /** \internal Not to be called or reimplemented. */
+ int expandPlainMacro(const QString &str, int pos, QStringList &ret) override;
+ /** \internal Not to be called or reimplemented. */
+ int expandEscapedMacro(const QString &str, int pos, QStringList &ret) override;
+
+ /**
+ * Return substitution list @p ret for single-character macro @p chr.
+ * @param chr the macro to expand
+ * @param ret return variable reference. It is guaranteed to be empty
+ * when expandMacro is entered.
+ * @return @c true iff @p chr was a recognized macro name
+ */
+ virtual bool expandMacro(QChar chr, QStringList &ret) = 0;
+};
+
+/**
+ * A group of functions providing macro expansion (substitution) in strings,
+ * optionally with quoting appropriate for shell execution.
+ */
+namespace KMacroExpander
+{
+/**
+ * Perform safe macro expansion (substitution) on a string.
+ * The escape char must be quoted with itself to obtain its literal
+ * representation in the resulting string.
+ *
+ * @param str The string to expand
+ * @param map map with substitutions
+ * @param c escape char indicating start of macro, or QChar::null if none
+ * @return the string with all valid macros expanded
+ *
+ * \code
+ * // Code example
+ * QHash<QChar,QString> map;
+ * map.insert('u', "/tmp/myfile.txt");
+ * map.insert('n', "My File");
+ * QString s = "%% Title: %u:%n";
+ * s = KMacroExpander::expandMacros(s, map);
+ * // s is now "% Title: /tmp/myfile.txt:My File";
+ * \endcode
+ */
+KCOREADDONS_EXPORT QString expandMacros(const QString &str, const QHash<QChar, QString> &map, QChar c = QLatin1Char('%'));
+
+/**
+ * Perform safe macro expansion (substitution) on a string for use
+ * in shell commands.
+ * The escape char must be quoted with itself to obtain its literal
+ * representation in the resulting string.
+ *
+ * @param str The string to expand
+ * @param map map with substitutions
+ * @param c escape char indicating start of macro, or QChar::null if none
+ * @return the string with all valid macros expanded, or a null string
+ * if a shell syntax error was detected in the command
+ *
+ * \code
+ * // Code example
+ * QHash<QChar,QString> map;
+ * map.insert('u', "/tmp/myfile.txt");
+ * map.insert('n', "My File");
+ * QString s = "kedit --caption %n %u";
+ * s = KMacroExpander::expandMacrosShellQuote(s, map);
+ * // s is now "kedit --caption 'My File' '/tmp/myfile.txt'";
+ * system(QFile::encodeName(s));
+ * \endcode
+ */
+KCOREADDONS_EXPORT QString expandMacrosShellQuote(const QString &str, const QHash<QChar, QString> &map, QChar c = QLatin1Char('%'));
+
+/**
+ * Perform safe macro expansion (substitution) on a string.
+ * The escape char must be quoted with itself to obtain its literal
+ * representation in the resulting string.
+ * Macro names can consist of chars in the range [A-Za-z0-9_];
+ * use braces to delimit macros from following words starting
+ * with these chars, or to use other chars for macro names.
+ *
+ * @param str The string to expand
+ * @param map map with substitutions
+ * @param c escape char indicating start of macro, or QChar::null if none
+ * @return the string with all valid macros expanded
+ *
+ * \code
+ * // Code example
+ * QHash<QString,QString> map;
+ * map.insert("url", "/tmp/myfile.txt");
+ * map.insert("name", "My File");
+ * QString s = "Title: %{url}-%name";
+ * s = KMacroExpander::expandMacros(s, map);
+ * // s is now "Title: /tmp/myfile.txt-My File";
+ * \endcode
+ */
+KCOREADDONS_EXPORT QString expandMacros(const QString &str, const QHash<QString, QString> &map, QChar c = QLatin1Char('%'));
+
+/**
+ * Perform safe macro expansion (substitution) on a string for use
+ * in shell commands. See KMacroExpanderBase::expandMacrosShellQuote()
+ * for the exact semantics.
+ * The escape char must be quoted with itself to obtain its literal
+ * representation in the resulting string.
+ * Macro names can consist of chars in the range [A-Za-z0-9_];
+ * use braces to delimit macros from following words starting
+ * with these chars, or to use other chars for macro names.
+ *
+ * @param str The string to expand
+ * @param map map with substitutions
+ * @param c escape char indicating start of macro, or QChar::null if none
+ * @return the string with all valid macros expanded, or a null string
+ * if a shell syntax error was detected in the command
+ *
+ * \code
+ * // Code example
+ * QHash<QString,QString> map;
+ * map.insert("url", "/tmp/myfile.txt");
+ * map.insert("name", "My File");
+ * QString s = "kedit --caption %name %{url}";
+ * s = KMacroExpander::expandMacrosShellQuote(s, map);
+ * // s is now "kedit --caption 'My File' '/tmp/myfile.txt'";
+ * system(QFile::encodeName(s));
+ * \endcode
+ */
+KCOREADDONS_EXPORT QString expandMacrosShellQuote(const QString &str, const QHash<QString, QString> &map, QChar c = QLatin1Char('%'));
+
+/**
+ * Same as above, except that the macros expand to string lists that
+ * are simply join(" ")ed together.
+ */
+KCOREADDONS_EXPORT QString expandMacros(const QString &str, const QHash<QChar, QStringList> &map, QChar c = QLatin1Char('%'));
+KCOREADDONS_EXPORT QString expandMacros(const QString &str, const QHash<QString, QStringList> &map, QChar c = QLatin1Char('%'));
+
+/**
+ * Same as above, except that the macros expand to string lists.
+ * If the macro appears inside a quoted string, the list is simply
+ * join(" ")ed together; otherwise every element expands to a separate
+ * quoted string.
+ */
+KCOREADDONS_EXPORT QString expandMacrosShellQuote(const QString &str, const QHash<QChar, QStringList> &map, QChar c = QLatin1Char('%'));
+KCOREADDONS_EXPORT QString expandMacrosShellQuote(const QString &str, const QHash<QString, QStringList> &map, QChar c = QLatin1Char('%'));
+}
+
+#endif /* KMACROEXPANDER_H */
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2002-2003, 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KMACROEXPANDER_P_H
+#define KMACROEXPANDER_P_H
+
+#include "kmacroexpander.h"
+
+class KMacroExpanderBasePrivate
+{
+public:
+ KMacroExpanderBasePrivate(QChar c)
+ : escapechar(c)
+ {
+ }
+ QChar escapechar;
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2002-2003 Oswald Buddenhagen <ossi@kde.org>
+ SPDX-FileCopyrightText: 2003 Waldo Bastian <bastian@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kmacroexpander_p.h"
+
+#include <QRegularExpression>
+#include <QStack>
+#include <QStringList>
+
+namespace KMacroExpander
+{
+enum Quoting {
+ noquote,
+ singlequote,
+ doublequote,
+ dollarquote,
+ paren,
+ subst,
+ group,
+ math,
+};
+typedef struct {
+ Quoting current;
+ bool dquote;
+} State;
+typedef struct {
+ QString str;
+ int pos;
+} Save;
+
+}
+
+using namespace KMacroExpander;
+
+#pragma message("TODO: Import these methods into Qt")
+
+inline static bool isSpecial(QChar cUnicode)
+{
+ static const uchar iqm[] = {0xff, 0xff, 0xff, 0xff, 0xdf, 0x07, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x78}; // 0-32 \'"$`<>|;&(){}*?#!~[]
+
+ uint c = cUnicode.unicode();
+ return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
+}
+
+static QString quoteArg(const QString &arg)
+{
+ if (!arg.length()) {
+ return QStringLiteral("''");
+ }
+ for (int i = 0; i < arg.length(); i++)
+ if (isSpecial(arg.unicode()[i])) {
+ QChar q(QLatin1Char('\''));
+ return q + QString(arg).replace(q, QLatin1String("'\\''")) + q;
+ }
+ return arg;
+}
+
+static QString joinArgs(const QStringList &args)
+{
+ QString ret;
+ for (QStringList::ConstIterator it = args.begin(); it != args.end(); ++it) {
+ if (!ret.isEmpty()) {
+ ret.append(QLatin1Char(' '));
+ }
+ ret.append(quoteArg(*it));
+ }
+ return ret;
+}
+
+bool KMacroExpanderBase::expandMacrosShellQuote(QString &str, int &pos)
+{
+ int len;
+ int pos2;
+ ushort ec = d->escapechar.unicode();
+ State state = {noquote, false};
+ QStack<State> sstack;
+ QStack<Save> ostack;
+ QStringList rst;
+ QString rsts;
+
+ while (pos < str.length()) {
+ ushort cc = str.unicode()[pos].unicode();
+ if (ec != 0) {
+ if (cc != ec) {
+ goto nohit;
+ }
+ if (!(len = expandEscapedMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ } else {
+ if (!(len = expandPlainMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ }
+ if (len < 0) {
+ pos -= len;
+ continue;
+ }
+ if (state.dquote) {
+ rsts = rst.join(QLatin1Char(' '));
+ rsts.replace(QRegularExpression(QStringLiteral("([$`\"\\\\])")), QStringLiteral("\\\\1"));
+ } else if (state.current == dollarquote) {
+ rsts = rst.join(QLatin1Char(' '));
+ rsts.replace(QRegularExpression(QStringLiteral("(['\\\\])")), QStringLiteral("\\\\1"));
+ } else if (state.current == singlequote) {
+ rsts = rst.join(QLatin1Char(' '));
+ rsts.replace(QLatin1Char('\''), QLatin1String("'\\''"));
+ } else {
+ if (rst.isEmpty()) {
+ str.remove(pos, len);
+ continue;
+ } else {
+ rsts = joinArgs(rst);
+ }
+ }
+ rst.clear();
+ str.replace(pos, len, rsts);
+ pos += rsts.length();
+ continue;
+ nohit:
+ if (state.current == singlequote) {
+ if (cc == '\'') {
+ state = sstack.pop();
+ }
+ } else if (cc == '\\') {
+ // always swallow the char -> prevent anomalies due to expansion
+ pos += 2;
+ continue;
+ } else if (state.current == dollarquote) {
+ if (cc == '\'') {
+ state = sstack.pop();
+ }
+ } else if (cc == '$') {
+ cc = str.unicode()[++pos].unicode();
+ if (cc == '(') {
+ sstack.push(state);
+ if (str.unicode()[pos + 1].unicode() == '(') {
+ Save sav = {str, pos + 2};
+ ostack.push(sav);
+ state.current = math;
+ pos += 2;
+ continue;
+ } else {
+ state.current = paren;
+ state.dquote = false;
+ }
+ } else if (cc == '{') {
+ sstack.push(state);
+ state.current = subst;
+ } else if (!state.dquote) {
+ if (cc == '\'') {
+ sstack.push(state);
+ state.current = dollarquote;
+ } else if (cc == '"') {
+ sstack.push(state);
+ state.current = doublequote;
+ state.dquote = true;
+ }
+ }
+ // always swallow the char -> prevent anomalies due to expansion
+ } else if (cc == '`') {
+ str.replace(pos, 1, QStringLiteral("$( ")); // add space -> avoid creating $((
+ pos2 = pos += 3;
+ for (;;) {
+ if (pos2 >= str.length()) {
+ pos = pos2;
+ return false;
+ }
+ cc = str.unicode()[pos2].unicode();
+ if (cc == '`') {
+ break;
+ }
+ if (cc == '\\') {
+ cc = str.unicode()[++pos2].unicode();
+ if (cc == '$' || cc == '`' || cc == '\\' || (cc == '"' && state.dquote)) {
+ str.remove(pos2 - 1, 1);
+ continue;
+ }
+ }
+ pos2++;
+ }
+ str[pos2] = QLatin1Char(')');
+ sstack.push(state);
+ state.current = paren;
+ state.dquote = false;
+ continue;
+ } else if (state.current == doublequote) {
+ if (cc == '"') {
+ state = sstack.pop();
+ }
+ } else if (cc == '\'') {
+ if (!state.dquote) {
+ sstack.push(state);
+ state.current = singlequote;
+ }
+ } else if (cc == '"') {
+ if (!state.dquote) {
+ sstack.push(state);
+ state.current = doublequote;
+ state.dquote = true;
+ }
+ } else if (state.current == subst) {
+ if (cc == '}') {
+ state = sstack.pop();
+ }
+ } else if (cc == ')') {
+ if (state.current == math) {
+ if (str.unicode()[pos + 1].unicode() == ')') {
+ state = sstack.pop();
+ pos += 2;
+ } else {
+ // false hit: the $(( was a $( ( in fact
+ // ash does not care, but bash does
+ pos = ostack.top().pos;
+ str = ostack.top().str;
+ ostack.pop();
+ state.current = paren;
+ state.dquote = false;
+ sstack.push(state);
+ }
+ continue;
+ } else if (state.current == paren) {
+ state = sstack.pop();
+ } else {
+ break;
+ }
+ } else if (cc == '}') {
+ if (state.current == KMacroExpander::group) {
+ state = sstack.pop();
+ } else {
+ break;
+ }
+ } else if (cc == '(') {
+ sstack.push(state);
+ state.current = paren;
+ } else if (cc == '{') {
+ sstack.push(state);
+ state.current = KMacroExpander::group;
+ }
+ pos++;
+ }
+ return sstack.empty();
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2008 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kmacroexpander_p.h"
+#include "kshell_p.h"
+
+#include "kshell.h"
+
+#include <QString>
+#include <QStringList>
+
+bool KMacroExpanderBase::expandMacrosShellQuote(QString &str, int &pos)
+{
+ int len;
+ int pos2;
+ ushort uc;
+ ushort ec = d->escapechar.unicode();
+ bool shellQuote = false; // shell is in quoted state
+ bool crtQuote = false; // c runtime is in quoted state
+ bool escaped = false; // previous char was a circumflex
+ int bslashes = 0; // previous chars were backslashes
+ int parens = 0; // parentheses nesting level
+ QStringList rst;
+ QString rsts;
+
+ while (pos < str.length()) {
+ ushort cc = str.unicode()[pos].unicode();
+ if (escaped) { // prevent anomalies due to expansion
+ goto notcf;
+ }
+ if (ec != 0) {
+ if (cc != ec) {
+ goto nohit;
+ }
+ if (!(len = expandEscapedMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ } else {
+ if (!(len = expandPlainMacro(str, pos, rst))) {
+ goto nohit;
+ }
+ }
+ if (len < 0) {
+ pos -= len;
+ continue;
+ }
+ if (shellQuote != crtQuote) { // Silly, isn't it? Ahoy to Redmond.
+ return false;
+ }
+ if (shellQuote) {
+ rsts = KShell::quoteArgInternal(rst.join(QLatin1Char(' ')), true);
+ } else {
+ if (rst.isEmpty()) {
+ str.remove(pos, len);
+ continue;
+ }
+ rsts = KShell::joinArgs(rst);
+ }
+ pos2 = 0;
+ while (pos2 < rsts.length() && ((uc = rsts.unicode()[pos2].unicode()) == '\\' || uc == '^')) {
+ pos2++;
+ }
+ if (pos2 < rsts.length() && rsts.unicode()[pos2].unicode() == '"') {
+ QString bsl;
+ bsl.reserve(bslashes);
+ for (; bslashes; bslashes--) {
+ bsl.append(QLatin1String("\\"));
+ }
+ rsts.prepend(bsl);
+ }
+ bslashes = 0;
+ rst.clear();
+ str.replace(pos, len, rsts);
+ pos += rsts.length();
+ continue;
+ nohit:
+ if (!escaped && !shellQuote && cc == '^') {
+ escaped = true;
+ } else {
+ notcf:
+ if (cc == '\\') {
+ bslashes++;
+ } else {
+ if (cc == '"') {
+ if (!escaped) {
+ shellQuote = !shellQuote;
+ }
+ if (!(bslashes & 1)) {
+ crtQuote = !crtQuote;
+ }
+ } else if (!shellQuote) {
+ if (cc == '(') {
+ parens++;
+ } else if (cc == ')')
+ if (--parens < 0) {
+ break;
+ }
+ }
+ bslashes = 0;
+ }
+ escaped = false;
+ }
+ pos++;
+ }
+ return true;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1999 Ian Zepp <icszepp@islc.net>
+ SPDX-FileCopyrightText: 2006 Dominic Battre <dominic@battre.de>
+ SPDX-FileCopyrightText: 2006 Martin Pool <mbp@canonical.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kstringhandler.h"
+
+#include <stdlib.h> // random()
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 67)
+#include <QRegExp> // for the word ranges
+#endif
+#include <QRegularExpression>
+#include <QVector>
+
+//
+// Capitalization routines
+//
+QString KStringHandler::capwords(const QString &text)
+{
+ if (text.isEmpty()) {
+ return text;
+ }
+
+ const QString strippedText = text.trimmed();
+ const QString space = QString(QLatin1Char(' '));
+ const QStringList words = capwords(strippedText.split(space));
+
+ QString result = text;
+ result.replace(strippedText, words.join(space));
+ return result;
+}
+
+QStringList KStringHandler::capwords(const QStringList &list)
+{
+ QStringList tmp = list;
+ for (QStringList::Iterator it = tmp.begin(); it != tmp.end(); ++it) {
+ *it = (*it)[0].toUpper() + (*it).midRef(1);
+ }
+ return tmp;
+}
+
+QString KStringHandler::lsqueeze(const QString &str, int maxlen)
+{
+ if (str.length() > maxlen) {
+ int part = maxlen - 3;
+ return QLatin1String("...") + str.rightRef(part);
+ } else {
+ return str;
+ }
+}
+
+QString KStringHandler::csqueeze(const QString &str, int maxlen)
+{
+ if (str.length() > maxlen && maxlen > 3) {
+ const int part = (maxlen - 3) / 2;
+ return str.leftRef(part) + QLatin1String("...") + str.rightRef(part);
+ } else {
+ return str;
+ }
+}
+
+QString KStringHandler::rsqueeze(const QString &str, int maxlen)
+{
+ if (str.length() > maxlen) {
+ int part = maxlen - 3;
+ return str.leftRef(part) + QLatin1String("...");
+ } else {
+ return str;
+ }
+}
+
+QStringList KStringHandler::perlSplit(const QString &sep, const QString &s, int max)
+{
+ bool ignoreMax = 0 == max;
+
+ QStringList l;
+
+ int searchStart = 0;
+
+ int tokenStart = s.indexOf(sep, searchStart);
+
+ while (-1 != tokenStart && (ignoreMax || l.count() < max - 1)) {
+ if (!s.midRef(searchStart, tokenStart - searchStart).isEmpty()) {
+ l << s.mid(searchStart, tokenStart - searchStart);
+ }
+
+ searchStart = tokenStart + sep.length();
+ tokenStart = s.indexOf(sep, searchStart);
+ }
+
+ if (!s.midRef(searchStart, s.length() - searchStart).isEmpty()) {
+ l << s.mid(searchStart, s.length() - searchStart);
+ }
+
+ return l;
+}
+
+QStringList KStringHandler::perlSplit(const QChar &sep, const QString &s, int max)
+{
+ bool ignoreMax = 0 == max;
+
+ QStringList l;
+
+ int searchStart = 0;
+
+ int tokenStart = s.indexOf(sep, searchStart);
+
+ while (-1 != tokenStart && (ignoreMax || l.count() < max - 1)) {
+ if (!s.midRef(searchStart, tokenStart - searchStart).isEmpty()) {
+ l << s.mid(searchStart, tokenStart - searchStart);
+ }
+
+ searchStart = tokenStart + 1;
+ tokenStart = s.indexOf(sep, searchStart);
+ }
+
+ if (!s.midRef(searchStart, s.length() - searchStart).isEmpty()) {
+ l << s.mid(searchStart, s.length() - searchStart);
+ }
+
+ return l;
+}
+
+#if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 67)
+QStringList KStringHandler::perlSplit(const QRegExp &sep, const QString &s, int max)
+{
+ // nothing to split
+ if (s.isEmpty()) {
+ return QStringList();
+ }
+
+ bool ignoreMax = 0 == max;
+
+ QStringList l;
+
+ int searchStart = 0;
+ int tokenStart = sep.indexIn(s, searchStart);
+ int len = sep.matchedLength();
+
+ while (-1 != tokenStart && (ignoreMax || l.count() < max - 1)) {
+ if (!s.midRef(searchStart, tokenStart - searchStart).isEmpty()) {
+ l << s.mid(searchStart, tokenStart - searchStart);
+ }
+
+ searchStart = tokenStart + len;
+ tokenStart = sep.indexIn(s, searchStart);
+ len = sep.matchedLength();
+ }
+
+ if (!s.midRef(searchStart, s.length() - searchStart).isEmpty()) {
+ l << s.mid(searchStart, s.length() - searchStart);
+ }
+
+ return l;
+}
+#endif
+
+QStringList KStringHandler::perlSplit(const QRegularExpression &sep, const QString &s, int max)
+{
+ // nothing to split
+ if (s.isEmpty()) {
+ return QStringList();
+ }
+
+ bool ignoreMax = max == 0;
+
+ QStringList list;
+
+ int start = 0;
+ QRegularExpression separator(sep);
+ separator.setPatternOptions(QRegularExpression::UseUnicodePropertiesOption);
+
+ QRegularExpressionMatchIterator iter = separator.globalMatch(s);
+ QRegularExpressionMatch match;
+ QString chunk;
+ while (iter.hasNext() && (ignoreMax || list.count() < max - 1)) {
+ match = iter.next();
+ chunk = s.mid(start, match.capturedStart() - start);
+ if (!chunk.isEmpty()) {
+ list.append(chunk);
+ }
+ start = match.capturedEnd();
+ }
+
+ // catch the remainder
+ chunk = s.mid(start, s.size() - start);
+ if (!chunk.isEmpty()) {
+ list.append(chunk);
+ }
+
+ return list;
+}
+
+QString KStringHandler::tagUrls(const QString &text)
+{
+ QString richText(text);
+ static const QRegularExpression urlEx(QStringLiteral("(www\\.(?!\\.)|(fish|ftp|http|https)://[\\d\\w\\./,:_~\\?=&;#@\\-\\+\\%\\$\\(\\)]+)"),
+ QRegularExpression::UseUnicodePropertiesOption);
+ // The reference \1 is going to be replaced by the matched url
+ richText.replace(urlEx, QStringLiteral("<a href=\"\\1\">\\1</a>"));
+ return richText;
+}
+
+QString KStringHandler::obscure(const QString &str)
+{
+ QString result;
+ const QChar *unicode = str.unicode();
+ for (int i = 0; i < str.length(); ++i)
+ // yes, no typo. can't encode ' ' or '!' because
+ // they're the unicode BOM. stupid scrambling. stupid.
+ result += (unicode[i].unicode() <= 0x21) ? unicode[i] : QChar(0x1001F - unicode[i].unicode());
+
+ return result;
+}
+
+bool KStringHandler::isUtf8(const char *buf)
+{
+ int i, n;
+ unsigned char c;
+ bool gotone = false;
+
+ if (!buf) {
+ return true; // whatever, just don't crash
+ }
+
+#define F 0 /* character never appears in text */
+#define T 1 /* character appears in plain ASCII text */
+#define I 2 /* character appears in ISO-8859 text */
+#define X 3 /* character appears in non-ISO extended ASCII (Mac, IBM PC) */
+ /* clang-format off */
+ static const unsigned char text_chars[256] = {
+ /* BEL BS HT LF FF CR */
+ F, F, F, F, F, F, F, T, T, T, T, F, T, T, F, F, /* 0x0X */
+ /* ESC */
+ F, F, F, F, F, F, F, F, F, F, F, T, F, F, F, F, /* 0x1X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x2X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x3X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x4X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x5X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x6X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, F, /* 0x7X */
+ /* NEL */
+ X, X, X, X, X, T, X, X, X, X, X, X, X, X, X, X, /* 0x8X */
+ X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, /* 0x9X */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xaX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xbX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xcX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xdX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xeX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I /* 0xfX */
+ };
+ /* clang-format on */
+
+ /* *ulen = 0; */
+ for (i = 0; (c = buf[i]); ++i) {
+ if ((c & 0x80) == 0) { /* 0xxxxxxx is plain ASCII */
+ /*
+ * Even if the whole file is valid UTF-8 sequences,
+ * still reject it if it uses weird control characters.
+ */
+
+ if (text_chars[c] != T) {
+ return false;
+ }
+
+ } else if ((c & 0x40) == 0) { /* 10xxxxxx never 1st byte */
+ return false;
+ } else { /* 11xxxxxx begins UTF-8 */
+ int following;
+
+ if ((c & 0x20) == 0) { /* 110xxxxx */
+ following = 1;
+ } else if ((c & 0x10) == 0) { /* 1110xxxx */
+ following = 2;
+ } else if ((c & 0x08) == 0) { /* 11110xxx */
+ following = 3;
+ } else if ((c & 0x04) == 0) { /* 111110xx */
+ following = 4;
+ } else if ((c & 0x02) == 0) { /* 1111110x */
+ following = 5;
+ } else {
+ return false;
+ }
+
+ for (n = 0; n < following; ++n) {
+ i++;
+ if (!(c = buf[i])) {
+ goto done;
+ }
+
+ if ((c & 0x80) == 0 || (c & 0x40)) {
+ return false;
+ }
+ }
+ gotone = true;
+ }
+ }
+done:
+ return gotone; /* don't claim it's UTF-8 if it's all 7-bit */
+}
+
+#undef F
+#undef T
+#undef I
+#undef X
+
+QString KStringHandler::from8Bit(const char *str)
+{
+ if (!str) {
+ return QString();
+ }
+ if (!*str) {
+ static const QLatin1String emptyString("");
+ return emptyString;
+ }
+ return KStringHandler::isUtf8(str) ? QString::fromUtf8(str) : QString::fromLocal8Bit(str);
+}
+
+QString KStringHandler::preProcessWrap(const QString &text)
+{
+ const QChar zwsp(0x200b);
+
+ QString result;
+ result.reserve(text.length());
+
+ for (int i = 0; i < text.length(); i++) {
+ const QChar c = text[i];
+ bool openingParens = (c == QLatin1Char('(') || c == QLatin1Char('{') || c == QLatin1Char('['));
+ bool singleQuote = (c == QLatin1Char('\''));
+ bool closingParens = (c == QLatin1Char(')') || c == QLatin1Char('}') || c == QLatin1Char(']'));
+ bool breakAfter = (closingParens || c.isPunct() || c.isSymbol());
+ bool nextIsSpace = (i == (text.length() - 1) || text[i + 1].isSpace());
+ bool prevIsSpace = (i == 0 || text[i - 1].isSpace() || result[result.length() - 1] == zwsp);
+
+ // Provide a breaking opportunity before opening parenthesis
+ if (openingParens && !prevIsSpace) {
+ result += zwsp;
+ }
+
+ // Provide a word joiner before the single quote
+ if (singleQuote && !prevIsSpace) {
+ result += QChar(0x2060);
+ }
+
+ result += c;
+
+ if (breakAfter && !openingParens && !nextIsSpace && !singleQuote) {
+ result += zwsp;
+ }
+ }
+
+ return result;
+}
+
+int KStringHandler::logicalLength(const QString &text)
+{
+ int length = 0;
+ const auto chrs = text.toUcs4();
+ for (auto chr : chrs) {
+ auto script = QChar::script(chr);
+ /* clang-format off */
+ if (script == QChar::Script_Han
+ || script == QChar::Script_Hangul
+ || script == QChar::Script_Hiragana
+ || script == QChar::Script_Katakana
+ || script == QChar::Script_Yi
+ || QChar::isHighSurrogate(chr)) { /* clang-format on */
+ length += 2;
+ } else {
+ length += 1;
+ }
+ }
+ return length;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1999 Ian Zepp <icszepp@islc.net>
+ SPDX-FileCopyrightText: 2000 Rik Hemsley (rikkus) <rik@kde.org>
+ SPDX-FileCopyrightText: 2006 Dominic Battre <dominic@battre.de>
+ SPDX-FileCopyrightText: 2006 Martin Pool <mbp@canonical.com>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+#ifndef KSTRINGHANDLER_H
+#define KSTRINGHANDLER_H
+
+#include <kcoreaddons_export.h>
+
+#include <QStringList>
+#include <qnamespace.h>
+
+class QChar;
+class QRegExp;
+class QRegularExpression;
+class QString;
+
+/**
+ * This namespace contains utility functions for handling strings.
+ *
+ * The functions here are intended to provide an easy way to
+ * cut/slice/splice words inside sentences in whatever order desired.
+ * While the main focus of KStringHandler is words (ie characters
+ * separated by spaces/tabs), the two core functions here (split()
+ * and join()) will allow you to use any character as a separator
+ * This will make it easy to redefine what a 'word' means in the
+ * future if needed.
+ *
+ * The function names and calling styles are based on python and mIRC's
+ * scripting support.
+ *
+ * The ranges are a fairly powerful way of getting/stripping words from
+ * a string. These ranges function, for the large part, as they would in
+ * python. See the word(const QString&, int) and remword(const QString&, int)
+ * functions for more detail.
+ *
+ * The methods here are completely stateless. All strings are cut
+ * on the fly and returned as new qstrings/qstringlists.
+ *
+ * @short Namespace for manipulating words and sentences in strings
+ * @author Ian Zepp <icszepp@islc.net>
+ * @see KShell
+ */
+namespace KStringHandler
+{
+/** Capitalizes each word in the string
+ * "hello there" becomes "Hello There" (string)
+ * @param text the text to capitalize
+ * @return the resulting string
+ */
+KCOREADDONS_EXPORT QString capwords(const QString &text);
+
+/** Capitalizes each word in the list
+ * [hello, there] becomes [Hello, There] (list)
+ * @param list the list to capitalize
+ * @return the resulting list
+ */
+KCOREADDONS_EXPORT QStringList capwords(const QStringList &list);
+
+/** Substitute characters at the beginning of a string by "...".
+ * @param str is the string to modify
+ * @param maxlen is the maximum length the modified string will have
+ * If the original string is shorter than "maxlen", it is returned verbatim
+ * @return the modified string
+ */
+KCOREADDONS_EXPORT QString lsqueeze(const QString &str, int maxlen = 40);
+
+/** Substitute characters at the middle of a string by "...".
+ * @param str is the string to modify
+ * @param maxlen is the maximum length the modified string will have
+ * If the original string is shorter than "maxlen", it is returned verbatim
+ * @return the modified string
+ */
+KCOREADDONS_EXPORT QString csqueeze(const QString &str, int maxlen = 40);
+
+/** Substitute characters at the end of a string by "...".
+ * @param str is the string to modify
+ * @param maxlen is the maximum length the modified string will have
+ * If the original string is shorter than "maxlen", it is returned verbatim
+ * @return the modified string
+ */
+KCOREADDONS_EXPORT QString rsqueeze(const QString &str, int maxlen = 40);
+
+/**
+ * Split a QString into a QStringList in a similar fashion to the static
+ * QStringList function in Qt, except you can specify a maximum number
+ * of tokens. If max is specified (!= 0) then only that number of tokens
+ * will be extracted. The final token will be the remainder of the string.
+ *
+ * Example:
+ * \code
+ * perlSplit("__", "some__string__for__you__here", 4)
+ * QStringList contains: "some", "string", "for", "you__here"
+ * \endcode
+ *
+ * @param sep is the string to use to delimit s.
+ * @param s is the input string
+ * @param max is the maximum number of extractions to perform, or 0.
+ * @return A QStringList containing tokens extracted from s.
+ */
+KCOREADDONS_EXPORT QStringList perlSplit(const QString &sep, const QString &s, int max = 0);
+
+/**
+ * Split a QString into a QStringList in a similar fashion to the static
+ * QStringList function in Qt, except you can specify a maximum number
+ * of tokens. If max is specified (!= 0) then only that number of tokens
+ * will be extracted. The final token will be the remainder of the string.
+ *
+ * Example:
+ * \code
+ * perlSplit(' ', "kparts reaches the parts other parts can't", 3)
+ * QStringList contains: "kparts", "reaches", "the parts other parts can't"
+ * \endcode
+ *
+ * @param sep is the character to use to delimit s.
+ * @param s is the input string
+ * @param max is the maximum number of extractions to perform, or 0.
+ * @return A QStringList containing tokens extracted from s.
+ */
+KCOREADDONS_EXPORT QStringList perlSplit(const QChar &sep, const QString &s, int max = 0);
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 67)
+/**
+ * Split a QString into a QStringList in a similar fashion to the static
+ * QStringList function in Qt, except you can specify a maximum number
+ * of tokens. If max is specified (!= 0) then only that number of tokens
+ * will be extracted. The final token will be the remainder of the string.
+ *
+ * Example:
+ * \code
+ * perlSplit(QRegExp("[! ]"), "Split me up ! I'm bored ! OK ?", 3)
+ * QStringList contains: "Split", "me", "up ! I'm bored ! OK ?"
+ * \endcode
+ *
+ * @param sep is the regular expression to use to delimit s.
+ * @param s is the input string
+ * @param max is the maximum number of extractions to perform, or 0.
+ * @return A QStringList containing tokens extracted from s.
+ *
+ * @deprecated Since 5.67, use perlSplit(const QRegularExpression &sep,
+ * const QString &s, int max = 0) instead.
+ */
+KCOREADDONS_EXPORT
+KCOREADDONS_DEPRECATED_VERSION(5, 67, "Use KStringHandler::perlSplit(const QRegularExpression &, const QString &, int)")
+QStringList perlSplit(const QRegExp &sep, const QString &s, int max = 0);
+#endif
+
+/**
+ * Split a QString into a QStringList in a similar fashion to the static
+ * QStringList function in Qt, except you can specify a maximum number
+ * of tokens. If max is specified (!= 0) then only that number of tokens
+ * will be extracted. The final token will be the remainder of the string.
+ *
+ * Example:
+ * \code
+ * perlSplit(QRegularExpression("[! ]"), "Split me up ! I'm bored ! OK ?", 3)
+ * QStringList contains: "Split", "me", "up ! I'm bored ! OK ?"
+ * \endcode
+ *
+ * @param sep is the regular expression to use to delimit s.
+ * @param s is the input string
+ * @param max is the maximum number of extractions to perform, or 0.
+ * @return A QStringList containing tokens extracted from s.
+ *
+ * @since 5.67
+ */
+KCOREADDONS_EXPORT QStringList perlSplit(const QRegularExpression &sep, const QString &s, int max = 0);
+
+/**
+ * This method auto-detects URLs in strings, and adds HTML markup to them
+ * so that richtext or HTML-enabled widgets will display the URL correctly.
+ * @param text the string which may contain URLs
+ * @return the resulting text
+ */
+KCOREADDONS_EXPORT QString tagUrls(const QString &text);
+
+/**
+ Obscure string by using a simple symmetric encryption. Applying the
+ function to a string obscured by this function will result in the original
+ string.
+
+ The function can be used to obscure passwords stored to configuration
+ files. Note that this won't give you any more security than preventing
+ that the password is directly copied and pasted.
+
+ @param str string to be obscured
+ @return obscured string
+*/
+KCOREADDONS_EXPORT QString obscure(const QString &str);
+
+/**
+ Guess whether a string is UTF8 encoded.
+
+ @param str the string to check
+ @return true if UTF8. If false, the string is probably in Local8Bit.
+ */
+KCOREADDONS_EXPORT bool isUtf8(const char *str);
+
+/**
+ Construct QString from a c string, guessing whether it is UTF8- or
+ Local8Bit-encoded.
+
+ @param str the input string
+ @return the (hopefully correctly guessed) QString representation of @p str
+ @see KEncodingProber
+
+ */
+KCOREADDONS_EXPORT QString from8Bit(const char *str);
+
+/**
+ Preprocesses the given string in order to provide additional line breaking
+ opportunities for QTextLayout.
+
+ This is done by inserting ZWSP (Zero-width space) characters in the string
+ at points that wouldn't normally be considered word boundaries by QTextLayout,
+ but where wrapping the text will produce good results.
+
+ Examples of such points includes after punctuation signs, underscores and
+ dashes, that aren't followed by spaces.
+
+ @since 4.4
+*/
+KCOREADDONS_EXPORT QString preProcessWrap(const QString &text);
+
+/**
+ Returns the length that reflects the density of information in the text. In
+ general the character from CJK languages are assigned with weight 2, while
+ other Latin characters are assigned with 1.
+
+ @since 5.41
+*/
+KCOREADDONS_EXPORT int logicalLength(const QString &text);
+
+}
+#endif
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2002 Dave Corrie <kde@davecorrie.com>
+ SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "ktexttohtml.h"
+#include "ktexttohtml_p.h"
+#include "ktexttohtmlemoticonsinterface.h"
+
+#include <QCoreApplication>
+#include <QFile>
+#include <QPluginLoader>
+#include <QRegularExpression>
+#include <QStringList>
+
+#include <limits.h>
+
+#include "kcoreaddons_debug.h"
+
+static KTextToHTMLEmoticonsInterface *s_emoticonsInterface = nullptr;
+
+static void loadEmoticonsPlugin()
+{
+ static bool triedLoadPlugin = false;
+ if (!triedLoadPlugin) {
+ triedLoadPlugin = true;
+
+ // Check if QGuiApplication::platformName property exists. This is a
+ // hackish way of determining whether we are running QGuiApplication,
+ // because we cannot load the FrameworkIntegration plugin into a
+ // QCoreApplication, as it would crash immediately
+ if (qApp->metaObject()->indexOfProperty("platformName") > -1) {
+ QPluginLoader lib(QStringLiteral("kf5/KEmoticonsIntegrationPlugin"));
+ QObject *rootObj = lib.instance();
+ if (rootObj) {
+ s_emoticonsInterface = rootObj->property(KTEXTTOHTMLEMOTICONS_PROPERTY).value<KTextToHTMLEmoticonsInterface *>();
+ }
+ }
+ }
+ if (!s_emoticonsInterface) {
+ s_emoticonsInterface = new KTextToHTMLEmoticonsDummy();
+ }
+}
+
+KTextToHTMLHelper::KTextToHTMLHelper(const QString &plainText, int pos, int maxUrlLen, int maxAddressLen)
+ : mText(plainText)
+ , mMaxUrlLen(maxUrlLen)
+ , mMaxAddressLen(maxAddressLen)
+ , mPos(pos)
+{
+}
+
+KTextToHTMLEmoticonsInterface *KTextToHTMLHelper::emoticonsInterface() const
+{
+ if (!s_emoticonsInterface) {
+ loadEmoticonsPlugin();
+ }
+ return s_emoticonsInterface;
+}
+
+QString KTextToHTMLHelper::getEmailAddress()
+{
+ QString address;
+
+ if (mPos < mText.length() && mText.at(mPos) == QLatin1Char('@')) {
+ // the following characters are allowed in a dot-atom (RFC 2822):
+ // a-z A-Z 0-9 . ! # $ % & ' * + - / = ? ^ _ ` { | } ~
+ const QString allowedSpecialChars = QStringLiteral(".!#$%&'*+-/=?^_`{|}~");
+
+ // determine the local part of the email address
+ int start = mPos - 1;
+ while (start >= 0 && mText.at(start).unicode() < 128
+ && (mText.at(start).isLetterOrNumber() //
+ || mText.at(start) == QLatin1Char('@') // allow @ to find invalid email addresses
+ || allowedSpecialChars.indexOf(mText.at(start)) != -1)) {
+ if (mText.at(start) == QLatin1Char('@')) {
+ return QString(); // local part contains '@' -> no email address
+ }
+ --start;
+ }
+ ++start;
+ // we assume that an email address starts with a letter or a digit
+ while ((start < mPos) && !mText.at(start).isLetterOrNumber()) {
+ ++start;
+ }
+ if (start == mPos) {
+ return QString(); // local part is empty -> no email address
+ }
+
+ // determine the domain part of the email address
+ int dotPos = INT_MAX;
+ int end = mPos + 1;
+ while (end < mText.length()
+ && (mText.at(end).isLetterOrNumber() //
+ || mText.at(end) == QLatin1Char('@') // allow @ to find invalid email addresses
+ || mText.at(end) == QLatin1Char('.') //
+ || mText.at(end) == QLatin1Char('-'))) {
+ if (mText.at(end) == QLatin1Char('@')) {
+ return QString(); // domain part contains '@' -> no email address
+ }
+ if (mText.at(end) == QLatin1Char('.')) {
+ dotPos = qMin(dotPos, end); // remember index of first dot in domain
+ }
+ ++end;
+ }
+ // we assume that an email address ends with a letter or a digit
+ while ((end > mPos) && !mText.at(end - 1).isLetterOrNumber()) {
+ --end;
+ }
+ if (end == mPos) {
+ return QString(); // domain part is empty -> no email address
+ }
+ if (dotPos >= end) {
+ return QString(); // domain part doesn't contain a dot
+ }
+
+ if (end - start > mMaxAddressLen) {
+ return QString(); // too long -> most likely no email address
+ }
+ address = mText.mid(start, end - start);
+
+ mPos = end - 1;
+ }
+ return address;
+}
+
+QString KTextToHTMLHelper::getPhoneNumber()
+{
+ if (!mText.at(mPos).isDigit() && mText.at(mPos) != QLatin1Char('+')) {
+ return {};
+ }
+
+ const QString allowedBeginSeparators = QStringLiteral(" \r\t\n:");
+ if (mPos > 0 && !allowedBeginSeparators.contains(mText.at(mPos - 1))) {
+ return {};
+ }
+
+ // this isn't 100% accurate, we filter stuff below that is too hard to capture with a regexp
+ static const QRegularExpression telPattern(QStringLiteral(R"([+0](( |( ?[/-] ?)?)\(?\d+\)?+){6,30})"));
+ const auto match = telPattern.match(mText, mPos, QRegularExpression::NormalMatch, QRegularExpression::AnchoredMatchOption);
+ if (match.hasMatch()) {
+ auto m = match.captured();
+ // check for maximum number of digits (15), see https://en.wikipedia.org/wiki/Telephone_numbering_plan
+ const int count = std::count_if(m.begin(), m.end(), [](const QChar &c) {
+ return c.isDigit();
+ });
+ if (count > 15) {
+ return {};
+ }
+ // only one / is allowed, otherwise we trigger on dates
+ if (std::count(m.begin(), m.end(), QLatin1Char('/')) > 1) {
+ return {};
+ }
+
+ // parenthesis need to be balanced, and must not be nested
+ int openIdx = -1;
+ for (int i = 0; i < m.size(); ++i) {
+ if ((m[i] == QLatin1Char('(') && openIdx >= 0) || (m[i] == QLatin1Char(')') && openIdx < 0)) {
+ return {};
+ }
+ if (m[i] == QLatin1Char('(')) {
+ openIdx = i;
+ } else if (m[i] == QLatin1Char(')')) {
+ openIdx = -1;
+ }
+ }
+ if (openIdx > 0) {
+ m = m.leftRef(openIdx - 1).trimmed().toString();
+ }
+
+ // check if there's a plausible separator at the end
+ const QString allowedEndSeparators = QStringLiteral(" \r\t\n,.");
+ const auto l = m.size();
+ if (mText.size() > mPos + l && !allowedEndSeparators.contains(mText.at(mPos + l))) {
+ return {};
+ }
+
+ mPos += l - 1;
+ return m;
+ }
+ return {};
+}
+
+static QString normalizePhoneNumber(const QString &str)
+{
+ QString res;
+ res.reserve(str.size());
+ for (const auto c : str) {
+ if (c.isDigit() || c == QLatin1Char('+')) {
+ res.push_back(c);
+ }
+ }
+ return res;
+}
+
+// The following characters are allowed in a dot-atom (RFC 2822):
+// a-z A-Z 0-9 . ! # $ % & ' * + - / = ? ^ _ ` { | } ~
+static const char s_allowedSpecialChars[] = ".!#$%&'*+-/=?^_`{|}~";
+
+bool KTextToHTMLHelper::atUrl() const
+{
+ // The character directly before the URL must not be a letter, a number or
+ // any other character allowed in a dot-atom (RFC 2822).
+ if (mPos > 0) {
+ const auto chBefore = mText.at(mPos - 1);
+ if (chBefore.isLetterOrNumber() || QLatin1String(s_allowedSpecialChars).contains(chBefore)) {
+ return false;
+ }
+ }
+
+ const auto segment = mText.midRef(mPos);
+ /* clang-format off */
+ return segment.startsWith(QLatin1String("http://"))
+ || segment.startsWith(QLatin1String("https://"))
+ || segment.startsWith(QLatin1String("vnc://"))
+ || segment.startsWith(QLatin1String("fish://"))
+ || segment.startsWith(QLatin1String("ftp://"))
+ || segment.startsWith(QLatin1String("ftps://"))
+ || segment.startsWith(QLatin1String("sftp://"))
+ || segment.startsWith(QLatin1String("smb://"))
+ || segment.startsWith(QLatin1String("irc://"))
+ || segment.startsWith(QLatin1String("ircs://"))
+ || segment.startsWith(QLatin1String("mailto:"))
+ || segment.startsWith(QLatin1String("www."))
+ || segment.startsWith(QLatin1String("ftp."))
+ || segment.startsWith(QLatin1String("file://"))
+ || segment.startsWith(QLatin1String("news:"))
+ || segment.startsWith(QLatin1String("tel:"))
+ || segment.startsWith(QLatin1String("xmpp:"));
+ /* clang-format on */
+}
+
+bool KTextToHTMLHelper::isEmptyUrl(const QString &url) const
+{
+ /* clang-format off */
+ return url.isEmpty()
+ || url == QLatin1String("http://")
+ || url == QLatin1String("https://")
+ || url == QLatin1String("fish://")
+ || url == QLatin1String("ftp://")
+ || url == QLatin1String("ftps://")
+ || url == QLatin1String("sftp://")
+ || url == QLatin1String("smb://")
+ || url == QLatin1String("vnc://")
+ || url == QLatin1String("irc://")
+ || url == QLatin1String("ircs://")
+ || url == QLatin1String("mailto")
+ || url == QLatin1String("mailto:")
+ || url == QLatin1String("www")
+ || url == QLatin1String("ftp")
+ || url == QLatin1String("news:")
+ || url == QLatin1String("news://")
+ || url == QLatin1String("tel")
+ || url == QLatin1String("tel:")
+ || url == QLatin1String("xmpp:");
+ /* clang-format on */
+}
+
+QString KTextToHTMLHelper::getUrl(bool *badurl)
+{
+ QString url;
+ if (atUrl()) {
+ // NOTE: see http://tools.ietf.org/html/rfc3986#appendix-A and especially appendix-C
+ // Appendix-C mainly says, that when extracting URLs from plain text, line breaks shall
+ // be allowed and should be ignored when the URI is extracted.
+
+ // This implementation follows this recommendation and
+ // allows the URL to be enclosed within different kind of brackets/quotes
+ // If an URL is enclosed, whitespace characters are allowed and removed, otherwise
+ // the URL ends with the first whitespace
+ // Also, if the URL is enclosed in brackets, the URL itself is not allowed
+ // to contain the closing bracket, as this would be detected as the end of the URL
+
+ QChar beforeUrl, afterUrl;
+
+ // detect if the url has been surrounded by brackets or quotes
+ if (mPos > 0) {
+ beforeUrl = mText.at(mPos - 1);
+
+ /*if ( beforeUrl == '(' ) {
+ afterUrl = ')';
+ } else */
+ if (beforeUrl == QLatin1Char('[')) {
+ afterUrl = QLatin1Char(']');
+ } else if (beforeUrl == QLatin1Char('<')) {
+ afterUrl = QLatin1Char('>');
+ } else if (beforeUrl == QLatin1Char('>')) { // for e.g. <link>http://.....</link>
+ afterUrl = QLatin1Char('<');
+ } else if (beforeUrl == QLatin1Char('"')) {
+ afterUrl = QLatin1Char('"');
+ }
+ }
+ url.reserve(mMaxUrlLen); // avoid allocs
+ int start = mPos;
+ bool previousCharIsSpace = false;
+ bool previousCharIsADoubleQuote = false;
+ bool previousIsAnAnchor = false;
+ /* clang-format off */
+ while (mPos < mText.length() //
+ && (mText.at(mPos).isPrint() || mText.at(mPos).isSpace())
+ && ((afterUrl.isNull() && !mText.at(mPos).isSpace())
+ || (!afterUrl.isNull() && mText.at(mPos) != afterUrl))) {
+ if (!previousCharIsSpace
+ && mText.at(mPos) == QLatin1Char('<')
+ && (mPos + 1) < mText.length()) { /* clang-format on */
+ // Fix Bug #346132: allow "http://www.foo.bar<http://foo.bar/>"
+ // < inside a URL is not allowed, however there is a test which
+ // checks that "http://some<Host>/path" should be allowed
+ // Therefore: check if what follows is another URL and if so, stop here
+ mPos++;
+ if (atUrl()) {
+ mPos--;
+ break;
+ }
+ mPos--;
+ }
+ if (!previousCharIsSpace && (mText.at(mPos) == QLatin1Char(' ')) && ((mPos + 1) < mText.length())) {
+ // Fix kmail bug: allow "http://www.foo.bar http://foo.bar/"
+ // Therefore: check if what follows is another URL and if so, stop here
+ mPos++;
+ if (atUrl()) {
+ mPos--;
+ break;
+ }
+ mPos--;
+ }
+ if (mText.at(mPos).isSpace()) {
+ previousCharIsSpace = true;
+ } else if (!previousIsAnAnchor && mText.at(mPos) == QLatin1Char('[')) {
+ break;
+ } else if (!previousIsAnAnchor && mText.at(mPos) == QLatin1Char(']')) {
+ break;
+ } else { // skip whitespace
+ if (previousCharIsSpace && mText.at(mPos) == QLatin1Char('<')) {
+ url.append(QLatin1Char(' '));
+ break;
+ }
+ previousCharIsSpace = false;
+ if (mText.at(mPos) == QLatin1Char('>') && previousCharIsADoubleQuote) {
+ // it's an invalid url
+ if (badurl) {
+ *badurl = true;
+ }
+ return QString();
+ }
+ if (mText.at(mPos) == QLatin1Char('"')) {
+ previousCharIsADoubleQuote = true;
+ } else {
+ previousCharIsADoubleQuote = false;
+ }
+ if (mText.at(mPos) == QLatin1Char('#')) {
+ previousIsAnAnchor = true;
+ }
+ url.append(mText.at(mPos));
+ if (url.length() > mMaxUrlLen) {
+ break;
+ }
+ }
+
+ ++mPos;
+ }
+
+ if (isEmptyUrl(url) || (url.length() > mMaxUrlLen)) {
+ mPos = start;
+ url.clear();
+ return url;
+ } else {
+ --mPos;
+ }
+ }
+
+ // HACK: This is actually against the RFC. However, most people don't properly escape the URL in
+ // their text with "" or <>. That leads to people writing an url, followed immediately by
+ // a dot to finish the sentence. That would lead the parser to include the dot in the url,
+ // even though that is not wanted. So work around that here.
+ // Most real-life URLs hopefully don't end with dots or commas.
+ const QString wordBoundaries = QStringLiteral(".,:!?)>");
+ if (url.length() > 1) {
+ do {
+ if (wordBoundaries.contains(url.at(url.length() - 1))) {
+ url.chop(1);
+ --mPos;
+ } else {
+ break;
+ }
+ } while (url.length() > 1);
+ }
+ return url;
+}
+
+QString KTextToHTMLHelper::highlightedText()
+{
+ // formating symbols must be prepended with a whitespace
+ if ((mPos > 0) && !mText.at(mPos - 1).isSpace()) {
+ return QString();
+ }
+
+ const QChar ch = mText.at(mPos);
+ if (ch != QLatin1Char('/') && ch != QLatin1Char('*') && ch != QLatin1Char('_') && ch != QLatin1Char('-')) {
+ return QString();
+ }
+
+ QRegularExpression re(QStringLiteral("\\%1([^\\s|^\\%1].*[^\\s|^\\%1])\\%1").arg(ch));
+ re.setPatternOptions(QRegularExpression::InvertedGreedinessOption);
+ const auto match = re.match(mText, mPos, QRegularExpression::NormalMatch, QRegularExpression::AnchoredMatchOption);
+
+ if (match.hasMatch()) {
+ if (match.capturedStart() == mPos) {
+ int length = match.capturedLength();
+ // there must be a whitespace after the closing formating symbol
+ if (mPos + length < mText.length() && !mText.at(mPos + length).isSpace()) {
+ return QString();
+ }
+ mPos += length - 1;
+ switch (ch.toLatin1()) {
+ case '*':
+ return QLatin1String("<b>*") + match.capturedRef(1) + QLatin1String("*</b>");
+ case '_':
+ return QLatin1String("<u>_") + match.capturedRef(1) + QLatin1String("_</u>");
+ case '/':
+ return QLatin1String("<i>/") + match.capturedRef(1) + QLatin1String("/</i>");
+ case '-':
+ return QLatin1String("<s>-") + match.capturedRef(1) + QLatin1String("-</s>");
+ }
+ }
+ }
+ return QString();
+}
+
+QString KTextToHTML::convertToHtml(const QString &plainText, const KTextToHTML::Options &flags, int maxUrlLen, int maxAddressLen)
+{
+ KTextToHTMLHelper helper(plainText, 0, maxUrlLen, maxAddressLen);
+
+ QString str;
+ QString result(static_cast<QChar *>(nullptr), helper.mText.length() * 2);
+ QChar ch;
+ int x;
+ bool startOfLine = true;
+
+ for (helper.mPos = 0, x = 0; helper.mPos < helper.mText.length(); ++helper.mPos, ++x) {
+ ch = helper.mText.at(helper.mPos);
+ if (flags & PreserveSpaces) {
+ if (ch == QLatin1Char(' ')) {
+ if (helper.mPos + 1 < helper.mText.length()) {
+ if (helper.mText.at(helper.mPos + 1) != QLatin1Char(' ')) {
+ // A single space, make it breaking if not at the start or end of the line
+ const bool endOfLine = helper.mText.at(helper.mPos + 1) == QLatin1Char('\n');
+ if (!startOfLine && !endOfLine) {
+ result += QLatin1Char(' ');
+ } else {
+ result += QLatin1String(" ");
+ }
+ } else {
+ // Whitespace of more than one space, make it all non-breaking
+ while (helper.mPos < helper.mText.length() && helper.mText.at(helper.mPos) == QLatin1Char(' ')) {
+ result += QLatin1String(" ");
+ ++helper.mPos;
+ ++x;
+ }
+
+ // We incremented once to often, undo that
+ --helper.mPos;
+ --x;
+ }
+ } else {
+ // Last space in the text, it is non-breaking
+ result += QLatin1String(" ");
+ }
+
+ if (startOfLine) {
+ startOfLine = false;
+ }
+ continue;
+ } else if (ch == QLatin1Char('\t')) {
+ do {
+ result += QLatin1String(" ");
+ ++x;
+ } while ((x & 7) != 0);
+ --x;
+ startOfLine = false;
+ continue;
+ }
+ }
+ if (ch == QLatin1Char('\n')) {
+ result += QLatin1String("<br />\n"); // Keep the \n, so apps can figure out the quoting levels correctly.
+ startOfLine = true;
+ x = -1;
+ continue;
+ }
+
+ startOfLine = false;
+ if (ch == QLatin1Char('&')) {
+ result += QLatin1String("&");
+ } else if (ch == QLatin1Char('"')) {
+ result += QLatin1String(""");
+ } else if (ch == QLatin1Char('<')) {
+ result += QLatin1String("<");
+ } else if (ch == QLatin1Char('>')) {
+ result += QLatin1String(">");
+ } else {
+ const int start = helper.mPos;
+ if (!(flags & IgnoreUrls)) {
+ bool badUrl = false;
+ str = helper.getUrl(&badUrl);
+ if (badUrl) {
+ QString resultBadUrl;
+ const int helperTextSize(helper.mText.count());
+ for (int i = 0; i < helperTextSize; ++i) {
+ const QChar chBadUrl = helper.mText.at(i);
+ if (chBadUrl == QLatin1Char('&')) {
+ resultBadUrl += QLatin1String("&");
+ } else if (chBadUrl == QLatin1Char('"')) {
+ resultBadUrl += QLatin1String(""");
+ } else if (chBadUrl == QLatin1Char('<')) {
+ resultBadUrl += QLatin1String("<");
+ } else if (chBadUrl == QLatin1Char('>')) {
+ resultBadUrl += QLatin1String(">");
+ } else {
+ resultBadUrl += chBadUrl;
+ }
+ }
+ return resultBadUrl;
+ }
+ if (!str.isEmpty()) {
+ QString hyperlink;
+ if (str.startsWith(QLatin1String("www."))) {
+ hyperlink = QLatin1String("http://") + str;
+ } else if (str.startsWith(QLatin1String("ftp."))) {
+ hyperlink = QLatin1String("ftp://") + str;
+ } else {
+ hyperlink = str;
+ }
+ result += QLatin1String("<a href=\"") + hyperlink + QLatin1String("\">") + str.toHtmlEscaped() + QLatin1String("</a>");
+ x += helper.mPos - start;
+ continue;
+ }
+ str = helper.getEmailAddress();
+ if (!str.isEmpty()) {
+ // len is the length of the local part
+ int len = str.indexOf(QLatin1Char('@'));
+ QString localPart = str.left(len);
+
+ // remove the local part from the result (as '&'s have been expanded to
+ // & we have to take care of the 4 additional characters per '&')
+ result.truncate(result.length() - len - (localPart.count(QLatin1Char('&')) * 4));
+ x -= len;
+
+ result += QLatin1String("<a href=\"mailto:") + str + QLatin1String("\">") + str + QLatin1String("</a>");
+ x += str.length() - 1;
+ continue;
+ }
+ if (flags & ConvertPhoneNumbers) {
+ str = helper.getPhoneNumber();
+ if (!str.isEmpty()) {
+ result += QLatin1String("<a href=\"tel:") + normalizePhoneNumber(str) + QLatin1String("\">") + str + QLatin1String("</a>");
+ x += str.length() - 1;
+ continue;
+ }
+ }
+ }
+ if (flags & HighlightText) {
+ str = helper.highlightedText();
+ if (!str.isEmpty()) {
+ result += str;
+ x += helper.mPos - start;
+ continue;
+ }
+ }
+ result += ch;
+ }
+ }
+
+ if (flags & ReplaceSmileys) {
+ const QStringList exclude = {QStringLiteral("(c)"), QStringLiteral("(C)"), QStringLiteral(">:-("), QStringLiteral(">:("), QStringLiteral("(B)"),
+ QStringLiteral("(b)"), QStringLiteral("(P)"), QStringLiteral("(p)"), QStringLiteral("(O)"), QStringLiteral("(o)"),
+ QStringLiteral("(D)"), QStringLiteral("(d)"), QStringLiteral("(E)"), QStringLiteral("(e)"), QStringLiteral("(K)"),
+ QStringLiteral("(k)"), QStringLiteral("(I)"), QStringLiteral("(i)"), QStringLiteral("(L)"), QStringLiteral("(l)"),
+ QStringLiteral("(8)"), QStringLiteral("(T)"), QStringLiteral("(t)"), QStringLiteral("(G)"), QStringLiteral("(g)"),
+ QStringLiteral("(F)"), QStringLiteral("(f)"), QStringLiteral("(H)"), QStringLiteral("8)"), QStringLiteral("(N)"),
+ QStringLiteral("(n)"), QStringLiteral("(Y)"), QStringLiteral("(y)"), QStringLiteral("(U)"), QStringLiteral("(u)"),
+ QStringLiteral("(W)"), QStringLiteral("(w)"), QStringLiteral("(6)")};
+
+ result = helper.emoticonsInterface()->parseEmoticons(result, true, exclude);
+ }
+
+ return result;
+}
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2002 Dave Corrie <kde@davecorrie.com>
+ SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KCOREADDONS_KTEXTTOHTML_H
+#define KCOREADDONS_KTEXTTOHTML_H
+
+#include <kcoreaddons_export.h>
+
+#include <QString>
+
+/**
+ * @author Dave Corrie \<kde@davecorrie.com\>
+ */
+namespace KTextToHTML
+{
+/**
+ * @see Options
+ * @since 5.5.0
+ */
+enum Option {
+ /**
+ * Preserve white-space formatting of the text
+ */
+ PreserveSpaces = 1 << 1,
+
+ /**
+ * Replace text emoticons smileys by emoticons images.
+ *
+ * @note
+ * This option works only when KEmoticons framework is available at runtime,
+ * and requires QGuiApplication, otherwise the flag is simply ignored.
+ */
+ ReplaceSmileys = 1 << 2,
+
+ /**
+ * Don't parse and replace any URLs.
+ */
+ IgnoreUrls = 1 << 3,
+
+ /**
+ * Interpret text highlighting markup, like *bold*, _underline_ and /italic/,
+ * and wrap them in corresponding HTML entities.
+ */
+ HighlightText = 1 << 4,
+
+ /**
+ * Replace phone numbers with tel: links.
+ * @since 5.56.0
+ */
+ ConvertPhoneNumbers = 1 << 5,
+};
+/**
+ * Stores a combination of #Option values.
+ */
+Q_DECLARE_FLAGS(Options, Option)
+Q_DECLARE_OPERATORS_FOR_FLAGS(Options)
+
+/**
+ * Converts plaintext into html. The following characters are converted
+ * to HTML entities: & " < >. Newlines are also preserved.
+ *
+ * @param plainText The text to be converted into HTML.
+ * @param options The options to use when processing @p plainText.
+ * @param maxUrlLen The maximum length of permitted URLs. The reason for
+ * this limit is that there may be possible security
+ * implications in handling URLs of unlimited length.
+ * @param maxAddressLen The maximum length of permitted email addresses.
+ * The reason for this limit is that there may be possible
+ * security implications in handling addresses of unlimited
+ * length.
+ *
+ * @return An HTML version of the text supplied in the 'plainText'
+ * parameter, suitable for inclusion in the BODY of an HTML document.
+ *
+ * @since 5.5.0
+ */
+KCOREADDONS_EXPORT QString convertToHtml(const QString &plainText, const KTextToHTML::Options &options, int maxUrlLen = 4096, int maxAddressLen = 255);
+
+}
+
+#endif
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2002 Dave Corrie <kde@davecorrie.com>
+ SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KTEXTTOHTML_P_H
+#define KTEXTTOHTML_P_H
+
+#include "kcoreaddons_export.h"
+#include "ktexttohtmlemoticonsinterface.h"
+
+class KTextToHTMLEmoticonsDummy : public KTextToHTMLEmoticonsInterface
+{
+public:
+ QString parseEmoticons(const QString &text, bool strictParse = false, const QStringList &exclude = QStringList()) override
+ {
+ Q_UNUSED(strictParse);
+ Q_UNUSED(exclude);
+ return text;
+ }
+};
+
+class KTextToHTMLHelper
+{
+public:
+ KTextToHTMLHelper(const QString &plainText, int pos = 0, int maxUrlLen = 4096, int maxAddressLen = 255);
+
+ KTextToHTMLEmoticonsInterface *emoticonsInterface() const;
+
+ QString getEmailAddress();
+ QString getPhoneNumber();
+ bool atUrl() const;
+ bool isEmptyUrl(const QString &url) const;
+ QString getUrl(bool *badurl = nullptr);
+ QString highlightedText();
+
+ QString mText;
+ int mMaxUrlLen;
+ int mMaxAddressLen;
+ int mPos;
+};
+
+#endif
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KTEXTTOHTMLEMOTICONSINTERFACE_H
+#define KTEXTTOHTMLEMOTICONSINTERFACE_H
+
+#include <QMetaType>
+#include <QStringList>
+
+/**
+ * @internal
+ * Used internally by KTextToHTML, implemented by plugin, for dynamic dependency on KEmoticons
+ */
+class KTextToHTMLEmoticonsInterface
+{
+public:
+ KTextToHTMLEmoticonsInterface()
+ {
+ }
+ virtual ~KTextToHTMLEmoticonsInterface()
+ {
+ } // KF6 TODO: de-inline (-Wweak-vtables)
+
+ virtual QString parseEmoticons(const QString &text, bool strictParse = false, const QStringList &exclude = QStringList()) = 0;
+};
+
+Q_DECLARE_METATYPE(KTextToHTMLEmoticonsInterface *)
+
+#define KTEXTTOHTMLEMOTICONS_PROPERTY "KTextToHTMLEmoticons"
+
+#endif
--- /dev/null
+#define ACCOUNTS_SERVICE_ICON_DIR "${ACCOUNTS_SERVICE_ICON_DIR}"
--- /dev/null
+#cmakedefine01 HAVE_GETGROUPLIST
--- /dev/null
+
+#define KDE4_DEFAULT_HOME "${KDE4_DEFAULT_HOME}"
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2014 Montel Laurent <montel@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kdelibs4configmigrator.h"
+
+#include <Kdelibs4Migration>
+#include <QDir>
+#include <QFile>
+#include <QFileInfo>
+#include <QLoggingCategory>
+#include <QPluginLoader>
+#include <QStandardPaths>
+
+Q_DECLARE_LOGGING_CATEGORY(MIGRATOR)
+// logging category for this framework, default: log stuff >= warning
+Q_LOGGING_CATEGORY(MIGRATOR, "kf.coreaddons.kdelibs4configmigrator", QtWarningMsg)
+
+class Kdelibs4ConfigMigratorPrivate
+{
+public:
+ Kdelibs4ConfigMigratorPrivate(const QString &_appName)
+ : appName(_appName)
+ {
+ }
+
+ QStringList configFiles;
+ QStringList uiFiles;
+ const QString appName;
+};
+
+Kdelibs4ConfigMigrator::Kdelibs4ConfigMigrator(const QString &appName)
+ : d(new Kdelibs4ConfigMigratorPrivate(appName))
+{
+}
+
+Kdelibs4ConfigMigrator::~Kdelibs4ConfigMigrator() = default;
+
+void Kdelibs4ConfigMigrator::setConfigFiles(const QStringList &configFileNameList)
+{
+ d->configFiles = configFileNameList;
+}
+
+void Kdelibs4ConfigMigrator::setUiFiles(const QStringList &uiFileNameList)
+{
+ d->uiFiles = uiFileNameList;
+}
+
+bool Kdelibs4ConfigMigrator::migrate()
+{
+ // Testing for kdehome
+ Kdelibs4Migration migration;
+ if (!migration.kdeHomeFound()) {
+ return false;
+ }
+
+ bool didSomething = false;
+
+ for (const QString &configFileName : qAsConst(d->configFiles)) {
+ const QString newConfigLocation = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + configFileName;
+
+ if (QFile(newConfigLocation).exists()) {
+ continue;
+ }
+ // Be safe
+ QFileInfo fileInfo(newConfigLocation);
+ QDir().mkpath(fileInfo.absolutePath());
+
+ const QString oldConfigFile(migration.locateLocal("config", configFileName));
+ if (!oldConfigFile.isEmpty()) {
+ if (QFile(oldConfigFile).copy(newConfigLocation)) {
+ didSomething = true;
+ qCDebug(MIGRATOR) << "config file" << oldConfigFile << "was migrated to" << newConfigLocation;
+ }
+ }
+ }
+
+ if (d->appName.isEmpty() && !d->uiFiles.isEmpty()) {
+ qCCritical(MIGRATOR) << " We can not migrate ui file. AppName is missing";
+ } else {
+ for (const QString &uiFileName : qAsConst(d->uiFiles)) {
+ const QString newConfigLocation = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/kxmlgui5/") + d->appName
+ + QLatin1Char('/') + uiFileName;
+ if (QFile(newConfigLocation).exists()) {
+ continue;
+ }
+ QFileInfo fileInfo(newConfigLocation);
+ QDir().mkpath(fileInfo.absolutePath());
+
+ const QString oldConfigFile(migration.locateLocal("data", d->appName + QLatin1Char('/') + uiFileName));
+ if (!oldConfigFile.isEmpty()) {
+ if (QFile(oldConfigFile).copy(newConfigLocation)) {
+ didSomething = true;
+ qCDebug(MIGRATOR) << "ui file" << oldConfigFile << "was migrated to" << newConfigLocation;
+ }
+ }
+ }
+ }
+
+ // Trigger KSharedConfig::openConfig()->reparseConfiguration() via the framework integration plugin
+ if (didSomething) {
+ QPluginLoader lib(QStringLiteral("kf5/FrameworkIntegrationPlugin"));
+ QObject *rootObj = lib.instance();
+ if (rootObj) {
+ QMetaObject::invokeMethod(rootObj, "reparseConfiguration");
+ }
+ }
+
+ return true;
+}
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2014 Montel Laurent <montel@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KDELIBS4CONFIGMIGRATOR_H
+#define KDELIBS4CONFIGMIGRATOR_H
+
+#include <QStringList>
+#include <kcoreaddons_export.h>
+#include <memory>
+
+/**
+ * @class Kdelibs4ConfigMigrator kdelibs4configmigrator.h Kdelibs4ConfigMigrator
+ *
+ * Kdelibs4ConfigMigrator migrates selected config files and ui files
+ * from the kdelibs 4.x location ($KDEHOME, as used by KStandardDirs)
+ * to the Qt 5.x location ($XDG_*_HOME, as used by QStandardPaths).
+ *
+ * @short Class for migration of config files and ui file from kdelibs4.
+ * @since 5.2
+ */
+class KCOREADDONS_EXPORT Kdelibs4ConfigMigrator
+{
+public:
+ /**
+ * Constructs a Kdelibs4ConfigMigrator
+ *
+ * @param appName The application name, which is used for the directory
+ * containing the .ui files.
+ */
+ explicit Kdelibs4ConfigMigrator(const QString &appName);
+
+ /**
+ * Destructor
+ */
+ ~Kdelibs4ConfigMigrator();
+
+ Kdelibs4ConfigMigrator(const Kdelibs4ConfigMigrator &) = delete;
+ Kdelibs4ConfigMigrator &operator=(const Kdelibs4ConfigMigrator &) = delete;
+
+ /**
+ * Migrate the files, if any.
+ *
+ * Returns true if the migration happened.
+ * It will return false if there was nothing to migrate (no KDEHOME).
+ * This return value is unrelated to error handling. It is just a way to skip anything else
+ * related to migration on a clean system, by writing
+ * @code
+ * if (migrate()) {
+ * look for old data to migrate as well
+ * }
+ * @endcode
+ */
+ bool migrate();
+
+ /**
+ * Set the list of config files that need to be migrated.
+ * @param configFileNameList list of config files
+ */
+ void setConfigFiles(const QStringList &configFileNameList);
+
+ /**
+ * Set the list of ui files to migrate.
+ * @param uiFileNameList list of ui files
+ */
+ void setUiFiles(const QStringList &uiFileNameList);
+
+private:
+ friend class Kdelibs4ConfigMigratorPrivate;
+ std::unique_ptr<class Kdelibs4ConfigMigratorPrivate> const d;
+};
+
+#endif // KDELIBS4CONFIGMIGRATOR_H
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2014 David Faure <faure@kde.org>
+ SPDX-FileCopyrightText: 2014 Ivan Cukic <ivan.cukic(at)kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kdelibs4migration.h"
+#include "config-kde4home.h"
+#include "kcoreaddons_debug.h"
+#include <QDir>
+#include <QVector>
+
+#ifdef Q_OS_WIN
+#include <shlobj.h>
+#endif
+
+class Kdelibs4MigrationPrivate
+{
+public:
+ QString m_kdeHome;
+};
+
+Kdelibs4Migration::Kdelibs4Migration()
+ : d(new Kdelibs4MigrationPrivate)
+{
+ if (qEnvironmentVariableIsSet("KDEHOME")) {
+ qCDebug(KCOREADDONS_DEBUG) << "Using KDEHOME as the location of the old config file";
+ d->m_kdeHome = QString::fromLocal8Bit(qgetenv("KDEHOME"));
+ } else {
+ QDir homeDir = QDir::home();
+ QVector<QString> testSubdirs;
+ testSubdirs << QStringLiteral(KDE4_DEFAULT_HOME) << QStringLiteral(".kde4") << QStringLiteral(".kde");
+#ifdef Q_OS_WIN
+ WCHAR wPath[MAX_PATH + 1];
+ if (SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, wPath) == S_OK) {
+ testSubdirs << QDir::fromNativeSeparators(QString::fromUtf16((const ushort *)wPath)) + QLatin1String("/" KDE4_DEFAULT_HOME);
+ }
+#endif
+ for (const QString &testSubdir : qAsConst(testSubdirs)) {
+ if (homeDir.exists(testSubdir)) {
+ qCDebug(KCOREADDONS_DEBUG) << "Using" << testSubdir << "as the location of the old config file";
+ d->m_kdeHome = homeDir.filePath(testSubdir);
+ break;
+ }
+ }
+ if (d->m_kdeHome.isEmpty()) {
+ d->m_kdeHome = homeDir.filePath(QStringLiteral(KDE4_DEFAULT_HOME));
+ }
+ }
+
+ if (!d->m_kdeHome.isEmpty() && !d->m_kdeHome.endsWith(QLatin1Char('/'))) {
+ d->m_kdeHome.append(QLatin1Char('/'));
+ }
+}
+
+Kdelibs4Migration::~Kdelibs4Migration() = default;
+
+bool Kdelibs4Migration::kdeHomeFound() const
+{
+ return !d->m_kdeHome.isEmpty() && QDir(d->m_kdeHome).exists();
+}
+
+QString Kdelibs4Migration::kdeHome() const
+{
+ return d->m_kdeHome;
+}
+
+QString Kdelibs4Migration::locateLocal(const char *type, const QString &filename) const
+{
+ if (d->m_kdeHome.isEmpty()) {
+ return QString();
+ }
+ const QString dir = saveLocation(type);
+ if (dir.isEmpty()) {
+ return QString();
+ }
+ const QString file = dir + filename;
+ if (QFile::exists(file)) {
+ return file;
+ }
+ return QString();
+}
+
+static const struct {
+ const char *type;
+ const char *subdir;
+} s_subdirs[] = {{"config", "share/config/"},
+ {"data", "share/apps/"},
+ {"services", "share/kde4/services"},
+ {"servicetypes", "share/kde4/servicetypes"},
+ {"wallpaper", "share/wallpapers"},
+ {"emoticons", "share/emoticons"},
+ {"templates", "share/templates"}};
+
+QString Kdelibs4Migration::saveLocation(const char *type, const QString &suffix) const
+{
+ if (d->m_kdeHome.isEmpty()) {
+ return QString();
+ }
+ static const int numResources = sizeof(s_subdirs) / sizeof(*s_subdirs);
+ for (uint i = 0; i < numResources; ++i) {
+ if (qstrcmp(s_subdirs[i].type, type) == 0) {
+ QString dir = d->m_kdeHome + QString::fromLatin1(s_subdirs[i].subdir) + suffix;
+ if (!dir.endsWith(QLatin1Char('/'))) {
+ dir += QLatin1Char('/');
+ }
+ return dir;
+ }
+ }
+ qCWarning(KCOREADDONS_DEBUG) << "No such resource" << type;
+ return QString();
+}
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2014 David Faure <faure@kde.org>
+ SPDX-FileCopyrightText: 2014 Ivan Cukic <ivan.cukic(at)kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KDELIBS4MIGRATION_H
+#define KDELIBS4MIGRATION_H
+
+#include <kcoreaddons_export.h>
+
+#include <QString>
+
+#include <memory>
+
+class Kdelibs4MigrationPrivate;
+
+/**
+ * \file kdelibs4migration.h
+ */
+
+/**
+ * @class Kdelibs4Migration kdelibs4migration.h Kdelibs4Migration
+ *
+ * Kdelibs4Migration provides support for locating config files
+ * and application data files saved by kdelibs 4 in the user's home directory
+ * ($KDEHOME, i.e. typically ~/.kde).
+ *
+ * Distributions that built kdelibs4 with a custom KDE home with
+ * the CMake option _KDE_DEFAULT_HOME_POSTFIX should use the same option
+ * here with _KDE4_DEFAULT_HOME_POSTFIX
+ *
+ * The purpose is to be able to let the application migrate these files
+ * to the KF5/Qt5 location for these files (QStandardPaths).
+ *
+ * Files from the "config" resource (as saved by KConfig) should be migrated to
+ * QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)
+ *
+ * Files from the "data" resource should be migrated to a subdirectory of
+ * QStandardPaths::writableLocation(QStandardPaths::DataLocation)
+ *
+ * The following resources are supported:
+ <ul>
+ <li>config</li>
+ <li>data</li>
+ <li>services</li>
+ <li>servicetypes</li>
+ <li>wallpaper</li>
+ <li>emoticons</li>
+ <li>templates</li>
+ </ul>
+ * Use kdeHome() for anything else.
+ *
+ * @short Class for migration of config files from kdelibs4
+ * @since 5.0
+ */
+class KCOREADDONS_EXPORT Kdelibs4Migration Q_DECL_FINAL
+{
+public:
+ /**
+ * Constructs a Kdelibs4Migration instance.
+ * The constructor attempts to locate the user's "kdehome" from kdelibs4.
+ */
+ explicit Kdelibs4Migration();
+
+ /**
+ * Destructor
+ */
+ ~Kdelibs4Migration();
+
+ Kdelibs4Migration(const Kdelibs4Migration &) = delete;
+ Kdelibs4Migration &operator=(const Kdelibs4Migration &) = delete;
+
+ /**
+ * Returns true if a "kdehome" was found.
+ * Otherwise, there is nothing to migrate.
+ */
+ bool kdeHomeFound() const;
+
+ /**
+ * Returns the kdehome that was found.
+ * Don't use this method if you can use locateLocal or saveLocation
+ * @since 5.13
+ */
+ QString kdeHome() const;
+
+ /**
+ * Finds a local file in a resource.
+ * This API is inspired by KStandardDirs::locateLocal for ease of porting.
+ * @param type The type of wanted resource.
+ * @param filename A relative filename of the resource.
+ */
+ QString locateLocal(const char *type, const QString &filename) const;
+
+ /**
+ * Finds a location to save files into for the given type
+ * in the user's home directory.
+ * @param type The type of location to return.
+ * @param suffix A subdirectory name.
+ */
+ QString saveLocation(const char *type, const QString &suffix = QString()) const;
+
+private:
+ std::unique_ptr<Kdelibs4MigrationPrivate> const d;
+};
+
+#endif // KFORMAT_H
--- /dev/null
+/* This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2013 Alex Merry <alex.merry@kdemail.net>
+ SPDX-FileCopyrightText: 2013 John Layt <jlayt@kde.org>
+ SPDX-FileCopyrightText: 2010 Michael Leupold <lemma@confuego.org>
+ SPDX-FileCopyrightText: 2009 Michael Pyne <mpyne@kde.org>
+ SPDX-FileCopyrightText: 2008 Albert Astals Cid <aacid@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kformatprivate_p.h"
+
+KFormat::KFormat(const QLocale &locale)
+ : d(new KFormatPrivate(locale))
+{
+}
+
+KFormat::KFormat(const KFormat &other)
+ : d(other.d)
+{
+}
+
+KFormat &KFormat::operator=(const KFormat &other)
+{
+ d = other.d;
+ return *this;
+}
+
+KFormat::~KFormat()
+{
+}
+
+QString KFormat::formatByteSize(double size, int precision, KFormat::BinaryUnitDialect dialect, KFormat::BinarySizeUnits units) const
+{
+ return d->formatByteSize(size, precision, dialect, units);
+}
+
+QString KFormat::formatValue(double value, KFormat::Unit unit, int precision, KFormat::UnitPrefix prefix, KFormat::BinaryUnitDialect dialect) const
+{
+ return d->formatValue(value, unit, QString(), precision, prefix, dialect);
+}
+
+QString KFormat::formatValue(double value, const QString &unit, int precision, KFormat::UnitPrefix prefix) const
+{
+ return d->formatValue(value, KFormat::Unit::Other, unit, precision, prefix, MetricBinaryDialect);
+}
+
+// TODO KF6 Merge both methods
+QString KFormat::formatValue(double value, const QString &unit, int precision, KFormat::UnitPrefix prefix, KFormat::BinaryUnitDialect dialect) const
+{
+ return d->formatValue(value, KFormat::Unit::Other, unit, precision, prefix, dialect);
+}
+
+QString KFormat::formatDuration(quint64 msecs, KFormat::DurationFormatOptions options) const
+{
+ return d->formatDuration(msecs, options);
+}
+
+QString KFormat::formatDecimalDuration(quint64 msecs, int decimalPlaces) const
+{
+ return d->formatDecimalDuration(msecs, decimalPlaces);
+}
+
+QString KFormat::formatSpelloutDuration(quint64 msecs) const
+{
+ return d->formatSpelloutDuration(msecs);
+}
+
+QString KFormat::formatRelativeDate(const QDate &date, QLocale::FormatType format) const
+{
+ return d->formatRelativeDate(date, format);
+}
+
+QString KFormat::formatRelativeDateTime(const QDateTime &dateTime, QLocale::FormatType format) const
+{
+ return d->formatRelativeDateTime(dateTime, format);
+}
+
+#include "moc_kformat.cpp"
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2013 Alex Merry <alex.merry@kdemail.net>
+ SPDX-FileCopyrightText: 2013 John Layt <jlayt@kde.org>
+ SPDX-FileCopyrightText: 2010 Michael Leupold <lemma@confuego.org>
+ SPDX-FileCopyrightText: 2009 Michael Pyne <mpyne@kde.org>
+ SPDX-FileCopyrightText: 2008 Albert Astals Cid <aacid@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KFORMAT_H
+#define KFORMAT_H
+
+#include <kcoreaddons_export.h>
+
+#include <QLocale>
+#include <QSharedPointer>
+#include <QString>
+
+class QDate;
+class QDateTime;
+
+class KFormatPrivate;
+
+/**
+ * \file kformat.h
+ */
+
+/*
+ The code in this class was copied from the old KLocale and modified
+ by John Layt (and also Alex Merry) in the KDELIBS 4 to KDE
+ Frameworks 5 transition in 2013.
+
+ Albert Astals Cid is the original author of formatSpelloutDuration()
+ originally named KLocale::prettyFormatDuration().
+
+ Michael Pyne is the original author of formatByteSize().
+
+ Michael Leupold is the original author of formatRelativeDate(()
+ originally part of KFormat::formatDate().
+*/
+
+/**
+ * @class KFormat kformat.h KFormat
+ *
+ * KFormat provides support for formatting numbers and datetimes in
+ * formats that are not supported by QLocale.
+ *
+ * @author John Layt <jlayt@kde.org>,
+ * Michael Pyne <mpyne@kde.org>,
+ * Albert Astals Cid <aacid@kde.org>,
+ *
+ * @short Class for formatting numbers and datetimes.
+ * @since 5.0
+ */
+class KCOREADDONS_EXPORT KFormat Q_DECL_FINAL
+{
+ Q_GADGET
+
+public:
+ /**
+ * These binary units are used in KDE by the formatByteSize()
+ * function.
+ *
+ * NOTE: There are several different units standards:
+ * 1) SI (i.e. metric), powers-of-10.
+ * 2) IEC, powers-of-2, with specific units KiB, MiB, etc.
+ * 3) JEDEC, powers-of-2, used for solid state memory sizing which
+ * is why you see flash cards labels as e.g. 4GB. These (ab)use
+ * the metric units. Although JEDEC only defines KB, MB, GB, if
+ * JEDEC is selected all units will be powers-of-2 with metric
+ * prefixes for clarity in the event of sizes larger than 1024 GB.
+ *
+ * Although 3 different dialects are possible this enum only uses
+ * metric names since adding all 3 different names of essentially the same
+ * unit would be pointless. Use BinaryUnitDialect to control the exact
+ * units returned.
+ *
+ * @see BinaryUnitDialect
+ * @see formatByteSize
+ */
+ enum BinarySizeUnits {
+ /// Auto-choose a unit such that the result is in the range [0, 1000 or 1024)
+ DefaultBinaryUnits = -1,
+
+ // The first real unit must be 0 for the current implementation!
+ UnitByte, ///< B 1 byte
+ UnitKiloByte, ///< KiB/KB/kB 1024/1000 bytes.
+ UnitMegaByte, ///< MiB/MB/MB 2^20/10^06 bytes.
+ UnitGigaByte, ///< GiB/GB/GB 2^30/10^09 bytes.
+ UnitTeraByte, ///< TiB/TB/TB 2^40/10^12 bytes.
+ UnitPetaByte, ///< PiB/PB/PB 2^50/10^15 bytes.
+ UnitExaByte, ///< EiB/EB/EB 2^60/10^18 bytes.
+ UnitZettaByte, ///< ZiB/ZB/ZB 2^70/10^21 bytes.
+ UnitYottaByte, ///< YiB/YB/YB 2^80/10^24 bytes.
+ UnitLastUnit = UnitYottaByte,
+ };
+
+ /**
+ * These units are used in KDE by the formatValue() function.
+ *
+ * @see formatValue
+ * @since 5.49
+ */
+ enum class Unit {
+ Other,
+ Bit, ///< "bit"
+ Byte, ///< "B"
+ Meter, ///< "m"
+ Hertz, ///< "Hz"
+ };
+
+ /**
+ * These prefixes are used in KDE by the formatValue()
+ * function.
+ *
+ * IEC prefixes are only defined for integral units of information, e.g.
+ * bits and bytes.
+ *
+ * @see BinarySizeUnits
+ * @see formatValue
+ * @since 5.49
+ */
+ enum class UnitPrefix {
+ /// Auto-choose a unit such that the result is in the range [0, 1000 or 1024)
+ AutoAdjust = -128,
+
+ Yocto = 0, ///< --/-/y 10^-24
+ Zepto, ///< --/-/z 10^-21
+ Atto, ///< --/-/a 10^-18
+ Femto, ///< --/-/f 10^-15
+ Pico, ///< --/-/p 10^-12
+ Nano, ///< --/-/n 10^-9
+ Micro, ///< --/-/µ 10^-6
+ Milli, ///< --/-/m 10^-3
+ Centi, ///< --/-/c 0.01
+ Deci, ///< --/-/d 0.1
+ Unity, ///< "" 1
+ Deca, ///< --/-/da 10
+ Hecto, ///< --/-/h 100
+ Kilo, ///< Ki/K/k 1024/1000
+ Mega, ///< Mi/M/M 2^20/10^06
+ Giga, ///< Gi/G/G 2^30/10^09
+ Tera, ///< Ti/T/T 2^40/10^12
+ Peta, ///< Pi/P/P 2^50/10^15
+ Exa, ///< Ei/E/E 2^60/10^18
+ Zetta, ///< Zi/Z/Z 2^70/10^21
+ Yotta, ///< Yi/Y/Y 2^80/10^24
+ };
+
+ /**
+ * This enum chooses what dialect is used for binary units.
+ *
+ * Note: Although JEDEC abuses the metric prefixes and can therefore be
+ * confusing, it has been used to describe *memory* sizes for quite some time
+ * and programs should therefore use either Default, JEDEC, or IEC 60027-2
+ * for memory sizes.
+ *
+ * On the other hand network transmission rates are typically in metric so
+ * Default, Metric, or IEC (which is unambiguous) should be chosen.
+ *
+ * Normally choosing DefaultBinaryDialect is the best option as that uses
+ * the user's selection for units. If the user has not selected a preference,
+ * IECBinaryDialect will typically be used.
+ *
+ * @see BinarySizeUnits
+ * @see formatByteSize
+ */
+ enum BinaryUnitDialect {
+ DefaultBinaryDialect = -1, ///< Used if no specific preference
+ IECBinaryDialect, ///< KiB, MiB, etc. 2^(10*n)
+ JEDECBinaryDialect, ///< KB, MB, etc. 2^(10*n)
+ MetricBinaryDialect, ///< SI Units, kB, MB, etc. 10^(3*n)
+ LastBinaryDialect = MetricBinaryDialect,
+ };
+
+ /**
+ * Format flags for formatDuration()
+ * @see DurationFormatOptions
+ */
+ enum DurationFormatOption {
+ DefaultDuration = 0x0, ///< Default formatting in localized 1:23:45 format
+ InitialDuration = 0x1, ///< Default formatting in localized 1h23m45s format
+ ShowMilliseconds = 0x2, ///< Include milliseconds in format, e.g. 1:23:45.678
+ HideSeconds = 0x4, ///< Hide the seconds, e.g. 1:23 or 1h23m, overrides ShowMilliseconds
+ FoldHours = 0x8, ///< Fold the hours into the minutes, e.g. 83:45 or 83m45s, overrides HideSeconds
+ };
+ /**
+ * Stores a combination of #DurationFormatOption values.
+ */
+ Q_DECLARE_FLAGS(DurationFormatOptions, DurationFormatOption)
+ Q_FLAG(DurationFormatOption)
+
+ /**
+ * Constructs a KFormat.
+ *
+ * @param locale the locale to use, defaults to the system locale
+ */
+ explicit KFormat(const QLocale &locale = QLocale());
+
+ /**
+ * Copy constructor
+ */
+ KFormat(const KFormat &other);
+
+ KFormat &operator=(const KFormat &other);
+
+ /**
+ * Destructor
+ */
+ ~KFormat();
+
+ /**
+ * Converts @p size from bytes to the appropriate string representation
+ * using the binary unit dialect @p dialect and the specific units @p units.
+ *
+ * Example:
+ * @code
+ * QString metric, iec, jedec, small;
+ * metric = formatByteSize(1000, 1, KFormat::MetricBinaryDialect, KFormat::UnitKiloByte);
+ * iec = formatByteSize(1024, 1, KFormat::IECBinaryDialect, KFormat::UnitKiloByte);
+ * jedec = formatByteSize(1024, 1, KFormat::JEDECBinaryDialect, KFormat::UnitKiloByte);
+ * small = formatByteSize(100);
+ * // metric == "1.0 kB", iec == "1.0 KiB", jedec == "1.0 KB", small == "100 B"
+ * @endcode
+ *
+ * @param size size in bytes
+ * @param precision number of places after the decimal point to use. KDE uses
+ * 1 by default so when in doubt use 1. Whenever KFormat::UnitByte is used
+ * (either explicitly or autoselected from KFormat::DefaultBinaryUnits),
+ * the fractional part is always omitted.
+ * @param dialect binary unit standard to use. Use DefaultBinaryDialect to
+ * use the localized user selection unless you need to use a specific
+ * unit type (such as displaying a flash memory size in JEDEC).
+ * @param units specific unit size to use in result. Use
+ * DefaultBinaryUnits to automatically select a unit that will return
+ * a sanely-sized number.
+ * @return converted size as a translated string including the units.
+ * E.g. "1.23 KiB", "2 GB" (JEDEC), "4.2 kB" (Metric).
+ * @see BinarySizeUnits
+ * @see BinaryUnitDialect
+ */
+
+ QString formatByteSize(double size,
+ int precision = 1,
+ KFormat::BinaryUnitDialect dialect = KFormat::DefaultBinaryDialect,
+ KFormat::BinarySizeUnits units = KFormat::DefaultBinaryUnits) const;
+
+ /**
+ * Given a number of milliseconds, converts that to a string containing
+ * the localized equivalent, e.g. 1:23:45
+ *
+ * @param msecs Time duration in milliseconds
+ * @param options options to use in the duration format
+ * @return converted duration as a string - e.g. "1:23:45" "1h23m"
+ */
+
+ QString formatDuration(quint64 msecs, KFormat::DurationFormatOptions options = KFormat::DefaultDuration) const;
+
+ /**
+ * Given a number of milliseconds, converts that to a string containing
+ * the localized equivalent to the requested decimal places.
+ *
+ * e.g. given formatDuration(60000), returns "1.0 minutes"
+ *
+ * @param msecs Time duration in milliseconds
+ * @param decimalPlaces Decimal places to round off to, defaults to 2
+ * @return converted duration as a string - e.g. "5.5 seconds" "23.0 minutes"
+ */
+
+ QString formatDecimalDuration(quint64 msecs, int decimalPlaces = 2) const;
+
+ /**
+ * Given a number of milliseconds, converts that to a spell-out string containing
+ * the localized equivalent.
+ *
+ * e.g. given formatSpelloutDuration(60001) returns "1 minute"
+ * given formatSpelloutDuration(62005) returns "1 minute and 2 seconds"
+ * given formatSpelloutDuration(90060000) returns "1 day and 1 hour"
+ *
+ * @param msecs Time duration in milliseconds
+ * @return converted duration as a string.
+ * Units not interesting to the user, for example seconds or minutes when the first
+ * unit is day, are not returned because they are irrelevant. The same applies for
+ * seconds when the first unit is hour.
+ */
+ QString formatSpelloutDuration(quint64 msecs) const;
+
+ /**
+ * Returns a string formatted to a relative date style.
+ *
+ * If the @p date falls within one week before or after the current date
+ * then a relative date string will be returned, such as:
+ * * Yesterday
+ * * Today
+ * * Tomorrow
+ * * Last Tuesday
+ * * Next Wednesday
+ *
+ * If the @p date falls outside this period then the @p format is used.
+ *
+ * @param date the date to be formatted
+ * @param format the date format to use
+ *
+ * @return the date as a string
+ */
+ QString formatRelativeDate(const QDate &date, QLocale::FormatType format) const;
+
+ /**
+ * Returns a string formatted to a relative datetime style.
+ *
+ * If the @p dateTime falls within one week before or after the current date
+ * then a relative date string will be returned, such as:
+ * * Yesterday, 3:00pm
+ * * Today, 3:00pm
+ * * Tomorrow, 3:00pm
+ * * Last Tuesday, 3:00pm
+ * * Next Wednesday, 3:00pm
+ *
+ * If the @p dateTime falls outside this period then the @p format is used.
+ *
+ * @param dateTime the date to be formatted
+ * @param format the date format to use
+ *
+ * @return the date as a string
+ */
+ QString formatRelativeDateTime(const QDateTime &dateTime, QLocale::FormatType format) const;
+
+ /**
+ * Converts @p value to the appropriate string representation
+ *
+ * Example:
+ * @code
+ * // sets formatted to "1.0 kbit"
+ * auto formatted = format.formatValue(1000, KFormat::Unit::Bit, 1, KFormat::UnitPrefix::Kilo);
+ * @endcode
+ *
+ * @param value value to be formatted
+ * @param precision number of places after the decimal point to use. KDE uses
+ * 1 by default so when in doubt use 1.
+ * @param unit unit to use in result.
+ * @param prefix specific prefix to use in result. Use UnitPrefix::AutoAdjust
+ * to automatically select an appropriate prefix.
+ * @param dialect prefix standard to use. Use DefaultBinaryDialect to
+ * use the localized user selection unless you need to use a specific
+ * unit type. Only meaningful for KFormat::Unit::Byte, and ignored for
+ * all other units.
+ * @return converted size as a translated string including prefix and unit.
+ * E.g. "1.23 KiB", "2 GB" (JEDEC), "4.2 kB" (Metric), "1.2 kbit".
+ * @see Unit
+ * @see UnitPrefix
+ * @see BinaryUnitDialect
+ * @since 5.49
+ */
+ QString formatValue(double value,
+ KFormat::Unit unit,
+ int precision = 1,
+ KFormat::UnitPrefix prefix = KFormat::UnitPrefix::AutoAdjust,
+ KFormat::BinaryUnitDialect dialect = KFormat::DefaultBinaryDialect) const;
+
+ /**
+ * Converts @p value to the appropriate string representation
+ *
+ * Example:
+ * @code
+ * QString bits, slow, fast;
+ * // sets bits to "1.0 kbit", slow to "1.0 kbit/s" and fast to "12.3 Mbit/s".
+ * bits = format.formatValue(1000, QStringLiteral("bit"), 1, KFormat::UnitPrefix::Kilo);
+ * slow = format.formatValue(1000, QStringLiteral("bit/s");
+ * fast = format.formatValue(12.3e6, QStringLiteral("bit/s");
+ * @endcode
+ *
+ * @param value value to be formatted
+ * @param precision number of places after the decimal point to use. KDE uses
+ * 1 by default so when in doubt use 1.
+ * @param unit unit to use in result.
+ * @param prefix specific prefix to use in result. Use UnitPrefix::AutoAdjust
+ * to automatically select an appropriate prefix.
+ * @return converted size as a translated string including prefix and unit.
+ * E.g. "1.2 kbit", "2.4 kB", "12.3 Mbit/s"
+ * @see UnitPrefix
+ * @since 5.49
+ */
+ QString formatValue(double value, const QString &unit, int precision = 1, KFormat::UnitPrefix prefix = KFormat::UnitPrefix::AutoAdjust) const;
+ /**
+ * Converts @p value to the appropriate string representation.
+ *
+ * Example:
+ * @code
+ * QString iec, jedec, metric;
+ * // Sets iec to "1.0 KiB/s", jedec to "1.0 KB/s" and metric to "1.0 kB/s"
+ * iec = format.formatValue(1024, QStringLiteral("B/s"), 1, KFormat::UnitPrefix::AutoAdjust, KFormat::IECBinaryDialect);
+ * jedec = format.formatValue(1024, QStringLiteral("B/s"), 1, KFormat::UnitPrefix::AutoAdjust, KFormat::JEDECBinaryDialect);
+ * metric = format.formatValue(1000, QStringLiteral("B/s"), 1, KFormat::UnitPrefix::AutoAdjust, KFormat::MetricBinaryDialect);
+ * @endcode
+ *
+ * @param value value to be formatted
+ * @param precision number of places after the decimal point to use. 1 is used by default; when
+ * in doubt use 1
+ * @param unit unit to use in result
+ * @param prefix specific prefix to use in result. Use UnitPrefix::AutoAdjust
+ * to automatically select an appropriate prefix
+ * @param dialect prefix standard to use. Use DefaultBinaryDialect to
+ * use the localized user selection unless you need to use a specific
+ * unit type
+ * @return converted size as a translated string including prefix and unit.
+ * E.g. "1.2 kbit", "2.4 kB", "12.3 Mbit/s"
+ * @see UnitPrefix
+ * @since 5.74
+ */
+ QString formatValue(double value, const QString &unit, int precision, KFormat::UnitPrefix prefix, KFormat::BinaryUnitDialect dialect) const;
+
+private:
+ QSharedDataPointer<KFormatPrivate> d;
+};
+
+#endif // KFORMAT_H
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2013 Alex Merry <alex.merry@kdemail.net>
+ SPDX-FileCopyrightText: 2013 John Layt <jlayt@kde.org>
+ SPDX-FileCopyrightText: 2010 Michael Leupold <lemma@confuego.org>
+ SPDX-FileCopyrightText: 2009 Michael Pyne <mpyne@kde.org>
+ SPDX-FileCopyrightText: 2008 Albert Astals Cid <aacid@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kformatprivate_p.h"
+
+#include <QDateTime>
+
+#include <math.h>
+
+KFormatPrivate::KFormatPrivate(const QLocale &locale)
+{
+ m_locale = locale;
+}
+
+KFormatPrivate::~KFormatPrivate()
+{
+}
+
+constexpr double bpow(int exp)
+{
+ return (exp > 0) ? 2.0 * bpow(exp - 1) : (exp < 0) ? 0.5 * bpow(exp + 1) : 1.0;
+}
+
+QString KFormatPrivate::formatValue(double value,
+ KFormat::Unit unit,
+ QString unitString,
+ int precision,
+ KFormat::UnitPrefix prefix,
+ KFormat::BinaryUnitDialect dialect) const
+{
+ if (dialect <= KFormat::DefaultBinaryDialect || dialect > KFormat::LastBinaryDialect) {
+ dialect = KFormat::IECBinaryDialect;
+ }
+
+ if (static_cast<int>(prefix) < static_cast<int>(KFormat::UnitPrefix::Yocto) || static_cast<int>(prefix) > static_cast<int>(KFormat::UnitPrefix::Yotta)) {
+ prefix = KFormat::UnitPrefix::AutoAdjust;
+ }
+
+ double multiplier = 1024.0;
+ if (dialect == KFormat::MetricBinaryDialect) {
+ multiplier = 1000.0;
+ }
+
+ int power = 0;
+ if (prefix == KFormat::UnitPrefix::AutoAdjust) {
+ double adjustValue = qAbs(value);
+ while (adjustValue >= multiplier) {
+ adjustValue /= multiplier;
+ power += 1;
+ }
+ while (adjustValue && adjustValue < 1.0) {
+ adjustValue *= multiplier;
+ power -= 1;
+ }
+ const KFormat::UnitPrefix map[] = {
+ KFormat::UnitPrefix::Yocto, // -8
+ KFormat::UnitPrefix::Zepto,
+ KFormat::UnitPrefix::Atto,
+ KFormat::UnitPrefix::Femto,
+ KFormat::UnitPrefix::Pico,
+ KFormat::UnitPrefix::Nano,
+ KFormat::UnitPrefix::Micro,
+ KFormat::UnitPrefix::Milli,
+ KFormat::UnitPrefix::Unity, // 0
+ KFormat::UnitPrefix::Kilo,
+ KFormat::UnitPrefix::Mega,
+ KFormat::UnitPrefix::Giga,
+ KFormat::UnitPrefix::Tera,
+ KFormat::UnitPrefix::Peta,
+ KFormat::UnitPrefix::Exa,
+ KFormat::UnitPrefix::Zetta,
+ KFormat::UnitPrefix::Yotta, // 8
+ };
+ power = std::max(-8, std::min(8, power));
+ prefix = map[power + 8];
+ }
+
+ if (prefix == KFormat::UnitPrefix::Unity && unit == KFormat::Unit::Byte) {
+ precision = 0;
+ }
+
+ struct PrefixMapEntry {
+ KFormat::UnitPrefix prefix;
+ double decimalFactor;
+ double binaryFactor;
+ QString prefixCharSI;
+ QString prefixCharIEC;
+ };
+
+ const PrefixMapEntry map[] = {
+ {KFormat::UnitPrefix::Yocto, 1e-24, bpow(-80), tr("y", "SI prefix for 10^⁻24"), QString()},
+ {KFormat::UnitPrefix::Zepto, 1e-21, bpow(-70), tr("z", "SI prefix for 10^⁻21"), QString()},
+ {KFormat::UnitPrefix::Atto, 1e-18, bpow(-60), tr("a", "SI prefix for 10^⁻18"), QString()},
+ {KFormat::UnitPrefix::Femto, 1e-15, bpow(-50), tr("f", "SI prefix for 10^⁻15"), QString()},
+ {KFormat::UnitPrefix::Pico, 1e-12, bpow(-40), tr("p", "SI prefix for 10^⁻12"), QString()},
+ {KFormat::UnitPrefix::Nano, 1e-9, bpow(-30), tr("n", "SI prefix for 10^⁻9"), QString()},
+ {KFormat::UnitPrefix::Micro, 1e-6, bpow(-20), tr("µ", "SI prefix for 10^⁻6"), QString()},
+ {KFormat::UnitPrefix::Milli, 1e-3, bpow(-10), tr("m", "SI prefix for 10^⁻3"), QString()},
+ {KFormat::UnitPrefix::Unity, 1.0, 1.0, QString(), QString()},
+ {KFormat::UnitPrefix::Kilo, 1e3, bpow(10), tr("k", "SI prefix for 10^3"), tr("Ki", "IEC binary prefix for 2^10")},
+ {KFormat::UnitPrefix::Mega, 1e6, bpow(20), tr("M", "SI prefix for 10^6"), tr("Mi", "IEC binary prefix for 2^20")},
+ {KFormat::UnitPrefix::Giga, 1e9, bpow(30), tr("G", "SI prefix for 10^9"), tr("Gi", "IEC binary prefix for 2^30")},
+ {KFormat::UnitPrefix::Tera, 1e12, bpow(40), tr("T", "SI prefix for 10^12"), tr("Ti", "IEC binary prefix for 2^40")},
+ {KFormat::UnitPrefix::Peta, 1e15, bpow(50), tr("P", "SI prefix for 10^15"), tr("Pi", "IEC binary prefix for 2^50")},
+ {KFormat::UnitPrefix::Exa, 1e18, bpow(60), tr("E", "SI prefix for 10^18"), tr("Ei", "IEC binary prefix for 2^60")},
+ {KFormat::UnitPrefix::Zetta, 1e21, bpow(70), tr("Z", "SI prefix for 10^21"), tr("Zi", "IEC binary prefix for 2^70")},
+ {KFormat::UnitPrefix::Yotta, 1e24, bpow(80), tr("Y", "SI prefix for 10^24"), tr("Yi", "IEC binary prefix for 2^80")},
+ };
+
+ auto entry = std::find_if(std::begin(map), std::end(map), [prefix](const PrefixMapEntry &e) {
+ return e.prefix == prefix;
+ });
+
+ switch (unit) {
+ case KFormat::Unit::Bit:
+ unitString = tr("bit", "Symbol of binary digit");
+ break;
+ case KFormat::Unit::Byte:
+ unitString = tr("B", "Symbol of byte");
+ break;
+ case KFormat::Unit::Meter:
+ unitString = tr("m", "Symbol of meter");
+ break;
+ case KFormat::Unit::Hertz:
+ unitString = tr("Hz", "Symbol of hertz");
+ break;
+ case KFormat::Unit::Other:
+ break;
+ }
+
+ if (prefix == KFormat::UnitPrefix::Unity) {
+ QString numString = m_locale.toString(value, 'f', precision);
+ //: value without prefix, format "<val> <unit>"
+ return tr("%1 %2", "no Prefix").arg(numString, unitString);
+ }
+
+ QString prefixString;
+ if (dialect == KFormat::MetricBinaryDialect) {
+ value /= entry->decimalFactor;
+ prefixString = entry->prefixCharSI;
+ } else {
+ value /= entry->binaryFactor;
+ if (dialect == KFormat::IECBinaryDialect) {
+ prefixString = entry->prefixCharIEC;
+ } else {
+ prefixString = entry->prefixCharSI.toUpper();
+ }
+ }
+
+ QString numString = m_locale.toString(value, 'f', precision);
+
+ //: value with prefix, format "<val> <prefix><unit>"
+ return tr("%1 %2%3", "MetricBinaryDialect").arg(numString, prefixString, unitString);
+}
+
+QString KFormatPrivate::formatByteSize(double size, int precision, KFormat::BinaryUnitDialect dialect, KFormat::BinarySizeUnits units) const
+{
+ // Current KDE default is IECBinaryDialect
+ if (dialect <= KFormat::DefaultBinaryDialect || dialect > KFormat::LastBinaryDialect) {
+ dialect = KFormat::IECBinaryDialect;
+ }
+
+ // Current KDE default is to auto-adjust so the size falls in the range 0 to 1000/1024
+ if (units < KFormat::DefaultBinaryUnits || units > KFormat::UnitLastUnit) {
+ units = KFormat::DefaultBinaryUnits;
+ }
+
+ int unit = 0; // Selects what unit to use
+ double multiplier = 1024.0;
+
+ if (dialect == KFormat::MetricBinaryDialect) {
+ multiplier = 1000.0;
+ }
+
+ // If a specific unit conversion is given, use it directly. Otherwise
+ // search until the result is in [0, multiplier] (or out of our range).
+ if (units == KFormat::DefaultBinaryUnits) {
+ while (qAbs(size) >= multiplier && unit < int(KFormat::UnitYottaByte)) {
+ size /= multiplier;
+ ++unit;
+ }
+ } else {
+ // A specific unit is in use
+ unit = static_cast<int>(units);
+ if (unit > 0) {
+ size /= pow(multiplier, unit);
+ }
+ }
+
+ // Bytes, no rounding
+ if (unit == 0) {
+ precision = 0;
+ }
+
+ QString numString = m_locale.toString(size, 'f', precision);
+
+ // Do not remove "//:" comments below, they are used by the translators.
+ // NB: we cannot pass pluralization arguments, as the size may be negative
+ if (dialect == KFormat::MetricBinaryDialect) {
+ switch (unit) {
+ case KFormat::UnitByte:
+ //: MetricBinaryDialect size in bytes
+ return tr("%1 B", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitKiloByte:
+ //: MetricBinaryDialect size in 1000 bytes
+ return tr("%1 kB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitMegaByte:
+ //: MetricBinaryDialect size in 10^6 bytes
+ return tr("%1 MB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitGigaByte:
+ //: MetricBinaryDialect size in 10^9 bytes
+ return tr("%1 GB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitTeraByte:
+ //: MetricBinaryDialect size in 10^12 bytes
+ return tr("%1 TB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitPetaByte:
+ //: MetricBinaryDialect size in 10^15 bytes
+ return tr("%1 PB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitExaByte:
+ //: MetricBinaryDialect size in 10^18 byte
+ return tr("%1 EB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitZettaByte:
+ //: MetricBinaryDialect size in 10^21 bytes
+ return tr("%1 ZB", "MetricBinaryDialect").arg(numString);
+ case KFormat::UnitYottaByte:
+ //: MetricBinaryDialect size in 10^24 bytes
+ return tr("%1 YB", "MetricBinaryDialect").arg(numString);
+ }
+ } else if (dialect == KFormat::JEDECBinaryDialect) {
+ switch (unit) {
+ case KFormat::UnitByte:
+ //: JEDECBinaryDialect memory size in bytes
+ return tr("%1 B", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitKiloByte:
+ //: JEDECBinaryDialect memory size in 1024 bytes
+ return tr("%1 KB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitMegaByte:
+ //: JEDECBinaryDialect memory size in 10^20 bytes
+ return tr("%1 MB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitGigaByte:
+ //: JEDECBinaryDialect memory size in 10^30 bytes
+ return tr("%1 GB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitTeraByte:
+ //: JEDECBinaryDialect memory size in 10^40 bytes
+ return tr("%1 TB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitPetaByte:
+ //: JEDECBinaryDialect memory size in 10^50 bytes
+ return tr("%1 PB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitExaByte:
+ //: JEDECBinaryDialect memory size in 10^60 bytes
+ return tr("%1 EB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitZettaByte:
+ //: JEDECBinaryDialect memory size in 10^70 bytes
+ return tr("%1 ZB", "JEDECBinaryDialect").arg(numString);
+ case KFormat::UnitYottaByte:
+ //: JEDECBinaryDialect memory size in 10^80 bytes
+ return tr("%1 YB", "JEDECBinaryDialect").arg(numString);
+ }
+ } else { // KFormat::IECBinaryDialect, KFormat::DefaultBinaryDialect
+ switch (unit) {
+ case KFormat::UnitByte:
+ //: IECBinaryDialect size in bytes
+ return tr("%1 B", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitKiloByte:
+ //: IECBinaryDialect size in 1024 bytes
+ return tr("%1 KiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitMegaByte:
+ //: IECBinaryDialect size in 10^20 bytes
+ return tr("%1 MiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitGigaByte:
+ //: IECBinaryDialect size in 10^30 bytes
+ return tr("%1 GiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitTeraByte:
+ //: IECBinaryDialect size in 10^40 bytes
+ return tr("%1 TiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitPetaByte:
+ //: IECBinaryDialect size in 10^50 bytes
+ return tr("%1 PiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitExaByte:
+ //: IECBinaryDialect size in 10^60 bytes
+ return tr("%1 EiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitZettaByte:
+ //: IECBinaryDialect size in 10^70 bytes
+ return tr("%1 ZiB", "IECBinaryDialect").arg(numString);
+ case KFormat::UnitYottaByte:
+ //: IECBinaryDialect size in 10^80 bytes
+ return tr("%1 YiB", "IECBinaryDialect").arg(numString);
+ }
+ }
+
+ // Should never reach here
+ Q_ASSERT(false);
+ return numString;
+}
+
+enum TimeConstants {
+ MSecsInDay = 86400000,
+ MSecsInHour = 3600000,
+ MSecsInMinute = 60000,
+ MSecsInSecond = 1000,
+};
+
+QString KFormatPrivate::formatDuration(quint64 msecs, KFormat::DurationFormatOptions options) const
+{
+ quint64 ms = msecs;
+ if (options & KFormat::HideSeconds) {
+ // round to nearest minute
+ ms = qRound64(ms / (qreal)MSecsInMinute) * MSecsInMinute;
+ } else if (!(options & KFormat::ShowMilliseconds)) {
+ // round to nearest second
+ ms = qRound64(ms / (qreal)MSecsInSecond) * MSecsInSecond;
+ }
+
+ int hours = ms / MSecsInHour;
+ ms = ms % MSecsInHour;
+ int minutes = ms / MSecsInMinute;
+ ms = ms % MSecsInMinute;
+ int seconds = ms / MSecsInSecond;
+ ms = ms % MSecsInSecond;
+
+ if ((options & KFormat::InitialDuration) == KFormat::InitialDuration) {
+ if ((options & KFormat::FoldHours) == KFormat::FoldHours && (options & KFormat::ShowMilliseconds) == KFormat::ShowMilliseconds) {
+ //: @item:intext Duration format minutes, seconds and milliseconds
+ return tr("%1m%2.%3s").arg(hours * 60 + minutes, 1, 10, QLatin1Char('0')).arg(seconds, 2, 10, QLatin1Char('0')).arg(ms, 3, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::FoldHours) == KFormat::FoldHours) {
+ //: @item:intext Duration format minutes and seconds
+ return tr("%1m%2s").arg(hours * 60 + minutes, 1, 10, QLatin1Char('0')).arg(seconds, 2, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::HideSeconds) == KFormat::HideSeconds) {
+ //: @item:intext Duration format hours and minutes
+ return tr("%1h%2m").arg(hours, 1, 10, QLatin1Char('0')).arg(minutes, 2, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::ShowMilliseconds) == KFormat::ShowMilliseconds) {
+ //: @item:intext Duration format hours, minutes, seconds, milliseconds
+ return tr("%1h%2m%3.%4s")
+ .arg(hours, 1, 10, QLatin1Char('0'))
+ .arg(minutes, 2, 10, QLatin1Char('0'))
+ .arg(seconds, 2, 10, QLatin1Char('0'))
+ .arg(ms, 3, 10, QLatin1Char('0'));
+ } else { // Default
+ //: @item:intext Duration format hours, minutes, seconds
+ return tr("%1h%2m%3s").arg(hours, 1, 10, QLatin1Char('0')).arg(minutes, 2, 10, QLatin1Char('0')).arg(seconds, 2, 10, QLatin1Char('0'));
+ }
+
+ } else {
+ if ((options & KFormat::FoldHours) == KFormat::FoldHours && (options & KFormat::ShowMilliseconds) == KFormat::ShowMilliseconds) {
+ //: @item:intext Duration format minutes, seconds and milliseconds
+ return tr("%1:%2.%3").arg(hours * 60 + minutes, 1, 10, QLatin1Char('0')).arg(seconds, 2, 10, QLatin1Char('0')).arg(ms, 3, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::FoldHours) == KFormat::FoldHours) {
+ //: @item:intext Duration format minutes and seconds
+ return tr("%1:%2").arg(hours * 60 + minutes, 1, 10, QLatin1Char('0')).arg(seconds, 2, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::HideSeconds) == KFormat::HideSeconds) {
+ //: @item:intext Duration format hours and minutes
+ return tr("%1:%2").arg(hours, 1, 10, QLatin1Char('0')).arg(minutes, 2, 10, QLatin1Char('0'));
+ } else if ((options & KFormat::ShowMilliseconds) == KFormat::ShowMilliseconds) {
+ //: @item:intext Duration format hours, minutes, seconds, milliseconds
+ return tr("%1:%2:%3.%4")
+ .arg(hours, 1, 10, QLatin1Char('0'))
+ .arg(minutes, 2, 10, QLatin1Char('0'))
+ .arg(seconds, 2, 10, QLatin1Char('0'))
+ .arg(ms, 3, 10, QLatin1Char('0'));
+ } else { // Default
+ //: @item:intext Duration format hours, minutes, seconds
+ return tr("%1:%2:%3").arg(hours, 1, 10, QLatin1Char('0')).arg(minutes, 2, 10, QLatin1Char('0')).arg(seconds, 2, 10, QLatin1Char('0'));
+ }
+ }
+
+ Q_UNREACHABLE();
+ return QString();
+}
+
+QString KFormatPrivate::formatDecimalDuration(quint64 msecs, int decimalPlaces) const
+{
+ if (msecs >= MSecsInDay) {
+ //: @item:intext %1 is a real number, e.g. 1.23 days
+ return tr("%1 days").arg(m_locale.toString(msecs / (MSecsInDay * 1.0), 'f', decimalPlaces));
+ } else if (msecs >= MSecsInHour) {
+ //: @item:intext %1 is a real number, e.g. 1.23 hours
+ return tr("%1 hours").arg(m_locale.toString(msecs / (MSecsInHour * 1.0), 'f', decimalPlaces));
+ } else if (msecs >= MSecsInMinute) {
+ //: @item:intext %1 is a real number, e.g. 1.23 minutes
+ return tr("%1 minutes").arg(m_locale.toString(msecs / (MSecsInMinute * 1.0), 'f', decimalPlaces));
+ } else if (msecs >= MSecsInSecond) {
+ //: @item:intext %1 is a real number, e.g. 1.23 seconds
+ return tr("%1 seconds").arg(m_locale.toString(msecs / (MSecsInSecond * 1.0), 'f', decimalPlaces));
+ }
+ //: @item:intext %1 is a whole number
+ //~ singular %n millisecond
+ //~ plural %n milliseconds
+ return tr("%n millisecond(s)", nullptr, msecs);
+}
+
+enum DurationUnits {
+ Days = 0,
+ Hours,
+ Minutes,
+ Seconds,
+};
+
+static QString formatSingleDuration(DurationUnits units, int n)
+{
+ // NB: n is guaranteed to be non-negative
+ switch (units) {
+ case Days:
+ //: @item:intext %n is a whole number
+ //~ singular %n day
+ //~ plural %n days
+ return KFormatPrivate::tr("%n day(s)", nullptr, n);
+ case Hours:
+ //: @item:intext %n is a whole number
+ //~ singular %n hour
+ //~ plural %n hours
+ return KFormatPrivate::tr("%n hour(s)", nullptr, n);
+ case Minutes:
+ //: @item:intext %n is a whole number
+ //~ singular %n minute
+ //~ plural %n minutes
+ return KFormatPrivate::tr("%n minute(s)", nullptr, n);
+ case Seconds:
+ //: @item:intext %n is a whole number
+ //~ singular %n second
+ //~ plural %n seconds
+ return KFormatPrivate::tr("%n second(s)", nullptr, n);
+ }
+ Q_ASSERT(false);
+ return QString();
+}
+
+QString KFormatPrivate::formatSpelloutDuration(quint64 msecs) const
+{
+ quint64 ms = msecs;
+ int days = ms / MSecsInDay;
+ ms = ms % (MSecsInDay);
+ int hours = ms / MSecsInHour;
+ ms = ms % MSecsInHour;
+ int minutes = ms / MSecsInMinute;
+ ms = ms % MSecsInMinute;
+ int seconds = qRound(ms / 1000.0);
+
+ // Handle correctly problematic case #1 (look at KFormatTest::prettyFormatDuration())
+ if (seconds == 60) {
+ return formatSpelloutDuration(msecs - ms + MSecsInMinute);
+ }
+
+ if (days && hours) {
+ /*: @item:intext days and hours. This uses the previous item:intext messages.
+ If this does not fit the grammar of your language please contact the i18n team to solve the problem */
+ return tr("%1 and %2").arg(formatSingleDuration(Days, days), formatSingleDuration(Hours, hours));
+ } else if (days) {
+ return formatSingleDuration(Days, days);
+ } else if (hours && minutes) {
+ /*: @item:intext hours and minutes. This uses the previous item:intext messages.
+ If this does not fit the grammar of your language please contact the i18n team to solve the problem */
+ return tr("%1 and %2").arg(formatSingleDuration(Hours, hours), formatSingleDuration(Minutes, minutes));
+ } else if (hours) {
+ return formatSingleDuration(Hours, hours);
+ } else if (minutes && seconds) {
+ /*: @item:intext minutes and seconds. This uses the previous item:intext messages.
+ If this does not fit the grammar of your language please contact the i18n team to solve the problem */
+ return tr("%1 and %2").arg(formatSingleDuration(Minutes, minutes), formatSingleDuration(Seconds, seconds));
+ } else if (minutes) {
+ return formatSingleDuration(Minutes, minutes);
+ } else {
+ return formatSingleDuration(Seconds, seconds);
+ }
+}
+
+QString KFormatPrivate::formatRelativeDate(const QDate &date, QLocale::FormatType format) const
+{
+ if (!date.isValid()) {
+ return tr("Invalid date", "used when a relative date string can't be generated because the date is invalid");
+ }
+
+ const qint64 daysTo = QDate::currentDate().daysTo(date);
+ if (daysTo > 2 || daysTo < -2) {
+ return m_locale.toString(date, format);
+ }
+
+ switch (daysTo) {
+ case 2:
+ return tr("In two days");
+ case 1:
+ return tr("Tomorrow");
+ case 0:
+ return tr("Today");
+ case -1:
+ return tr("Yesterday");
+ case -2:
+ return tr("Two days ago");
+ }
+ Q_UNREACHABLE();
+}
+
+QString KFormatPrivate::formatRelativeDateTime(const QDateTime &dateTime, QLocale::FormatType format) const
+{
+ const QDateTime now = QDateTime::currentDateTime();
+ const qint64 daysTo = dateTime.daysTo(now);
+ if (daysTo > 2 || daysTo < -2) {
+ return m_locale.toString(dateTime, format);
+ }
+
+ const auto secsToNow = dateTime.secsTo(now);
+ if (secsToNow >= 0 && secsToNow < 60 * 60) {
+ const int minutesToNow = secsToNow / 60;
+ if (minutesToNow <= 1) {
+ return tr("Just now");
+ } else {
+ return tr("%1 minutes ago").arg(minutesToNow);
+ }
+ }
+
+ /*: relative datetime with %1 result of formatReleativeDate() and %2 the formatted time
+ If this does not fit the grammar of your language please contact the i18n team to solve the problem */
+ return tr("%1, %2").arg(formatRelativeDate(dateTime.date(), format), m_locale.toString(dateTime.time(), format));
+}
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2013 Alex Merry <alex.merry@kdemail.net>
+ SPDX-FileCopyrightText: 2013 John Layt <jlayt@kde.org>
+ SPDX-FileCopyrightText: 2010 Michael Leupold <lemma@confuego.org>
+ SPDX-FileCopyrightText: 2009 Michael Pyne <mpyne@kde.org>
+ SPDX-FileCopyrightText: 2008 Albert Astals Cid <aacid@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KFORMATPRIVATE_P_H
+#define KFORMATPRIVATE_P_H
+
+#include "kformat.h"
+
+#include <QCoreApplication> // for Q_DECLARE_TR_FUNCTIONS
+
+class KFormatPrivate : public QSharedData
+{
+ Q_DECLARE_TR_FUNCTIONS(KFormat)
+
+public:
+ explicit KFormatPrivate(const QLocale &locale);
+ virtual ~KFormatPrivate();
+
+ QString formatByteSize(double size, int precision, KFormat::BinaryUnitDialect dialect, KFormat::BinarySizeUnits units) const;
+
+ QString
+ formatValue(double value, KFormat::Unit unit, QString unitString, int precision, KFormat::UnitPrefix prefix, KFormat::BinaryUnitDialect dialect) const;
+
+ QString formatDuration(quint64 msecs, KFormat::DurationFormatOptions options) const;
+
+ QString formatDecimalDuration(quint64 msecs, int decimalPlaces) const;
+
+ QString formatSpelloutDuration(quint64 msecs) const;
+
+ QString formatRelativeDate(const QDate &date, QLocale::FormatType format) const;
+
+ QString formatRelativeDateTime(const QDateTime &dateTime, QLocale::FormatType format) const;
+
+private:
+ QLocale m_locale;
+};
+
+#endif // KFORMATPRIVATE_P_H
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2010 Jacopo De Simoi <wilderkde@gmail.com>
+ SPDX-FileCopyrightText: 2014 Lukáš Tinkl <ltinkl@redhat.com>
+ SPDX-FileCopyrightText: 2016 Kai Uwe Broulik <kde@privat.broulik.de>
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KLISTOPENFILESJOB_H
+#define KLISTOPENFILESJOB_H
+
+#include <QObject>
+#include <QString>
+#include <kcoreaddons_export.h>
+#include <kjob.h>
+#include <kprocesslist.h>
+
+#include <memory>
+
+class KListOpenFilesJobPrivate;
+
+/**
+ * @brief Provides information about processes that have open files in a given path or subdirectory of path.
+ *
+ * When start() is invoked it starts to collect information about processes that have any files open in path or a
+ * subdirectory of path. When it is done the KJob::result signal is emitted and the result can be retrieved with the
+ * processInfoList function.
+ *
+ * On Unix like systems the lsof utility is used to get the list of processes.
+ * On Windows the listing always fails with error code NotSupported.
+ *
+ * @since 5.63
+ */
+class KCOREADDONS_EXPORT KListOpenFilesJob : public KJob
+{
+ Q_OBJECT
+public:
+ explicit KListOpenFilesJob(const QString &path);
+ ~KListOpenFilesJob() override;
+ void start() override;
+ /**
+ * @brief Returns the list of processes with open files for the requested path
+ * @return The list of processes with open files for the requested path
+ */
+ KProcessList::KProcessInfoList processInfoList() const;
+
+public:
+ /**
+ * @brief Special error codes emitted by KListOpenFilesJob
+ *
+ * The KListOpenFilesJob uses the error codes defined here besides the standard error codes defined by KJob
+ */
+ enum class Error {
+ /*** Indicates that the platform doesn't support listing open files by processes */
+ NotSupported = KJob::UserDefinedError + 1,
+ /*** Internal error has ocurred */
+ InternalError = KJob::UserDefinedError + 2,
+ /*** The specified path does not exist */
+ DoesNotExist = KJob::UserDefinedError + 11,
+ };
+
+private:
+ friend class KListOpenFilesJobPrivate;
+ std::unique_ptr<KListOpenFilesJobPrivate> const d;
+};
+
+#endif // KLISTOPENFILESJOB_H
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2010 Jacopo De Simoi <wilderkde@gmail.com>
+ SPDX-FileCopyrightText: 2014 Lukáš Tinkl <ltinkl@redhat.com>
+ SPDX-FileCopyrightText: 2016 Kai Uwe Broulik <kde@privat.broulik.de>
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "klistopenfilesjob.h"
+#include <QDir>
+#include <QProcess>
+#include <QRegularExpression>
+#include <QVector>
+
+class KListOpenFilesJobPrivate
+{
+public:
+ KListOpenFilesJobPrivate(KListOpenFilesJob *Job, const QDir &Path)
+ : job(Job)
+ , path(Path)
+ {
+ QObject::connect(&lsofProcess, &QProcess::errorOccurred, job, [this](QProcess::ProcessError error) {
+ lsofError(error);
+ });
+
+ QObject::connect(&lsofProcess,
+ QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
+ job,
+ [this](int exitCode, QProcess::ExitStatus exitStatus) {
+ lsofFinished(exitCode, exitStatus);
+ });
+ }
+ void start()
+ {
+ if (!path.exists()) {
+ emitResult(static_cast<int>(KListOpenFilesJob::Error::DoesNotExist), QObject::tr("Path %1 doesn't exist").arg(path.path()));
+ return;
+ }
+ lsofProcess.start(QStringLiteral("lsof"), {QStringLiteral("-t"), QStringLiteral("+d"), path.path()});
+ }
+ KProcessList::KProcessInfoList getProcessInfoList() const
+ {
+ return processInfoList;
+ }
+
+private:
+ void lsofError(QProcess::ProcessError processError)
+ {
+ emitResult(static_cast<int>(KListOpenFilesJob::Error::InternalError), QObject::tr("Failed to execute `lsof' error code %1").arg(processError));
+ }
+ void lsofFinished(int, QProcess::ExitStatus)
+ {
+ if (hasEmittedResult) {
+ return;
+ }
+ const QString out(QString::fromLocal8Bit(lsofProcess.readAll()));
+ const QVector<QStringRef> pidList = out.splitRef(QRegularExpression(QStringLiteral("\\s+")), Qt::SkipEmptyParts);
+ for (const auto &pidStr : pidList) {
+ qint64 pid = pidStr.toLongLong();
+ if (!pid) {
+ continue;
+ }
+ processInfoList << KProcessList::processInfo(pid);
+ }
+ job->emitResult();
+ }
+ void emitResult(int error, const QString &errorText)
+ {
+ if (hasEmittedResult) {
+ return;
+ }
+ job->setError(error);
+ job->setErrorText(errorText);
+ job->emitResult();
+ hasEmittedResult = true;
+ }
+
+private:
+ KListOpenFilesJob *job;
+ const QDir path;
+ bool hasEmittedResult = false;
+ QProcess lsofProcess;
+ KProcessList::KProcessInfoList processInfoList;
+};
+
+KListOpenFilesJob::KListOpenFilesJob(const QString &path)
+ : d(new KListOpenFilesJobPrivate(this, path))
+{
+}
+
+KListOpenFilesJob::~KListOpenFilesJob() = default;
+
+void KListOpenFilesJob::start()
+{
+ d->start();
+}
+
+KProcessList::KProcessInfoList KListOpenFilesJob::processInfoList() const
+{
+ return d->getProcessInfoList();
+}
+
+#include "moc_klistopenfilesjob.cpp"
--- /dev/null
+/*
+ This file is part of the KDE project
+
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "klistopenfilesjob.h"
+#include <QTimer>
+
+class KListOpenFilesJobPrivate
+{
+};
+
+KListOpenFilesJob::KListOpenFilesJob(const QString &)
+ : d(nullptr)
+{
+}
+
+KListOpenFilesJob::~KListOpenFilesJob() = default;
+
+void KListOpenFilesJob::start()
+{
+ QTimer::singleShot(0, [this]() {
+ setError(static_cast<int>(KListOpenFilesJob::Error::NotSupported));
+ setErrorText(QObject::tr("KListOpenFilesJob is not supported on Windows"));
+ emitResult();
+ });
+}
+
+KProcessList::KProcessInfoList KListOpenFilesJob::processInfoList() const
+{
+ return KProcessList::KProcessInfoList();
+}
+
+#include "moc_klistopenfilesjob.cpp"
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014-2019 Harald Sitter <sitter@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include "kosrelease.h"
+
+#include <QFile>
+
+#include "kcoreaddons_debug.h"
+#include "kshell.h"
+
+// Sets a QString var
+static void setVar(QString *var, const QString &value)
+{
+ // Values may contain quotation marks, strip them as we have no use for them.
+ KShell::Errors error;
+ QStringList args = KShell::splitArgs(value, KShell::NoOptions, &error);
+ if (error != KShell::NoError) { // Failed to parse.
+ return;
+ }
+ *var = args.join(QLatin1Char(' '));
+}
+
+// Sets a QStringList var (i.e. splits a string value)
+static void setVar(QStringList *var, const QString &value)
+{
+ // Instead of passing the verbatim value we manually strip any initial quotes
+ // and then run it through KShell. At this point KShell will actually split
+ // by spaces giving us the final QStringList.
+ // NOTE: Splitting like this does not actually allow escaped substrings to
+ // be handled correctly, so "kitteh \"french fries\"" would result in
+ // three list entries. I'd argue that if someone makes an id like that
+ // they are at fault for the bogus parsing here though as id explicitly
+ // is required to not contain spaces even if more advanced shell escaping
+ // is also allowed...
+ QString value_ = value;
+ if (value_.at(0) == QLatin1Char('"') && value_.at(value_.size() - 1) == QLatin1Char('"')) {
+ value_.remove(0, 1);
+ value_.remove(-1, 1);
+ }
+ KShell::Errors error;
+ QStringList args = KShell::splitArgs(value_, KShell::NoOptions, &error);
+ if (error != KShell::NoError) { // Failed to parse.
+ return;
+ }
+ *var = args;
+}
+
+static QStringList splitEntry(const QString &line)
+{
+ QStringList list;
+ const int separatorIndex = line.indexOf(QLatin1Char('='));
+ list << line.mid(0, separatorIndex);
+ if (separatorIndex != -1) {
+ list << line.mid(separatorIndex + 1, -1);
+ }
+ return list;
+}
+
+static QString defaultFilePath()
+{
+ if (QFile::exists(QStringLiteral("/etc/os-release"))) {
+ return QStringLiteral("/etc/os-release");
+ } else if (QFile::exists(QStringLiteral("/usr/lib/os-release"))) {
+ return QStringLiteral("/usr/lib/os-release");
+ } else {
+ return QString();
+ }
+}
+
+class KOSReleasePrivate
+{
+public:
+ explicit KOSReleasePrivate(QString filePath)
+ : name(QStringLiteral("Linux"))
+ , id(QStringLiteral("linux"))
+ , prettyName(QStringLiteral("Linux"))
+ {
+ // Default values for non-optional fields set above ^.
+
+ QHash<QString, QString *> stringHash = {{QStringLiteral("NAME"), &name},
+ {QStringLiteral("VERSION"), &version},
+ {QStringLiteral("ID"), &id},
+ // idLike is not a QString, special handling below!
+ {QStringLiteral("VERSION_CODENAME"), &versionCodename},
+ {QStringLiteral("VERSION_ID"), &versionId},
+ {QStringLiteral("PRETTY_NAME"), &prettyName},
+ {QStringLiteral("ANSI_COLOR"), &ansiColor},
+ {QStringLiteral("CPE_NAME"), &cpeName},
+ {QStringLiteral("HOME_URL"), &homeUrl},
+ {QStringLiteral("DOCUMENTATION_URL"), &documentationUrl},
+ {QStringLiteral("SUPPORT_URL"), &supportUrl},
+ {QStringLiteral("BUG_REPORT_URL"), &bugReportUrl},
+ {QStringLiteral("PRIVACY_POLICY_URL"), &privacyPolicyUrl},
+ {QStringLiteral("BUILD_ID"), &buildId},
+ {QStringLiteral("VARIANT"), &variant},
+ {QStringLiteral("VARIANT_ID"), &variantId},
+ {QStringLiteral("LOGO"), &logo}};
+
+ if (filePath.isEmpty()) {
+ filePath = defaultFilePath();
+ }
+ if (filePath.isEmpty()) {
+ qCWarning(KCOREADDONS_DEBUG) << "Failed to find os-release file!";
+ return;
+ }
+
+ QFile file(filePath);
+ // NOTE: The os-release specification defines default values for specific
+ // fields which means that even if we can not read the os-release file
+ // we have sort of expected default values to use.
+ // TODO: it might still be handy to indicate to the outside whether
+ // fallback values are being used or not.
+ file.open(QIODevice::ReadOnly | QIODevice::Text);
+ QString line;
+ QStringList parts;
+ while (!file.atEnd()) {
+ // Trimmed to handle indented comment lines properly
+ line = QString::fromLatin1(file.readLine()).trimmed();
+
+ if (line.startsWith(QLatin1Char('#'))) {
+ // Comment line
+ // Lines beginning with "#" shall be ignored as comments.
+ continue;
+ }
+
+ parts = splitEntry(line);
+
+ if (parts.size() != 2) {
+ // Line has no =, must be invalid.
+ qCDebug(KCOREADDONS_DEBUG) << "Unexpected/invalid os-release line:" << line;
+ continue;
+ }
+
+ QString key = parts.at(0);
+ QString value = parts.at(1).trimmed();
+
+ if (QString *var = stringHash.value(key, nullptr)) {
+ setVar(var, value);
+ continue;
+ }
+
+ // ID_LIKE is a list and parsed as such (rather than a QString).
+ if (key == QLatin1String("ID_LIKE")) {
+ setVar(&idLike, value);
+ continue;
+ }
+
+ // os-release explicitly allows for vendor specific additions, we'll
+ // collect them as strings and exposes them as "extras".
+ QString parsedValue;
+ setVar(&parsedValue, value);
+ extras.insert(key, parsedValue);
+ }
+ }
+
+ QString name;
+ QString version;
+ QString id;
+ QStringList idLike;
+ QString versionCodename;
+ QString versionId;
+ QString prettyName;
+ QString ansiColor;
+ QString cpeName;
+ QString homeUrl;
+ QString documentationUrl;
+ QString supportUrl;
+ QString bugReportUrl;
+ QString privacyPolicyUrl;
+ QString buildId;
+ QString variant;
+ QString variantId;
+ QString logo;
+
+ QHash<QString, QString> extras;
+};
+
+KOSRelease::KOSRelease(const QString &filePath)
+ : d(new KOSReleasePrivate(filePath))
+{
+}
+
+KOSRelease::~KOSRelease() = default;
+
+QString KOSRelease::name() const
+{
+ return d->name;
+}
+
+QString KOSRelease::version() const
+{
+ return d->version;
+}
+
+QString KOSRelease::id() const
+{
+ return d->id;
+}
+
+QStringList KOSRelease::idLike() const
+{
+ return d->idLike;
+}
+
+QString KOSRelease::versionCodename() const
+{
+ return d->versionCodename;
+}
+
+QString KOSRelease::versionId() const
+{
+ return d->versionId;
+}
+
+QString KOSRelease::prettyName() const
+{
+ return d->prettyName;
+}
+
+QString KOSRelease::ansiColor() const
+{
+ return d->ansiColor;
+}
+
+QString KOSRelease::cpeName() const
+{
+ return d->cpeName;
+}
+
+QString KOSRelease::homeUrl() const
+{
+ return d->homeUrl;
+}
+
+QString KOSRelease::documentationUrl() const
+{
+ return d->documentationUrl;
+}
+
+QString KOSRelease::supportUrl() const
+{
+ return d->supportUrl;
+}
+
+QString KOSRelease::bugReportUrl() const
+{
+ return d->bugReportUrl;
+}
+
+QString KOSRelease::privacyPolicyUrl() const
+{
+ return d->privacyPolicyUrl;
+}
+
+QString KOSRelease::buildId() const
+{
+ return d->buildId;
+}
+
+QString KOSRelease::variant() const
+{
+ return d->variant;
+}
+
+QString KOSRelease::variantId() const
+{
+ return d->variantId;
+}
+
+QString KOSRelease::logo() const
+{
+ return d->logo;
+}
+
+QStringList KOSRelease::extraKeys() const
+{
+ return d->extras.keys();
+}
+
+QString KOSRelease::extraValue(const QString &key) const
+{
+ return d->extras.value(key);
+}
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014-2019 Harald Sitter <sitter@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#ifndef KOSRELEASE_H
+#define KOSRELEASE_H
+
+#include <kcoreaddons_export.h>
+
+#include <QString>
+#include <QStringList>
+
+#include <memory>
+
+/**
+ * @brief The OSRelease class parses /etc/os-release files
+ *
+ * https://www.freedesktop.org/software/systemd/man/os-release.html
+ *
+ * os-release is a free desktop standard for describing an operating system.
+ * This class parses and models os-release files.
+ *
+ * @since 5.58.0
+ */
+class KCOREADDONS_EXPORT KOSRelease Q_DECL_FINAL
+{
+public:
+ /**
+ * Constructs a new OSRelease instance. Parsing happens in the constructor
+ * and the data is not cached across instances.
+ *
+ * @note The format specification makes no assertions about trailing #
+ * comments being supported. They result in undefined behavior.
+ *
+ * @param filePath The path to the os-release file. By default the first
+ * available file of the paths specified in the os-release manpage is
+ * parsed.
+ */
+ explicit KOSRelease(const QString &filePath = QString());
+ ~KOSRelease();
+
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#NAME= */
+ QString name() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#VERSION= */
+ QString version() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#ID= */
+ QString id() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#ID_LIKE= */
+ QStringList idLike() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#VERSION_CODENAME= */
+ QString versionCodename() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#VERSION_ID= */
+ QString versionId() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#PRETTY_NAME= */
+ QString prettyName() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#ANSI_COLOR= */
+ QString ansiColor() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#CPE_NAME= */
+ QString cpeName() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#HOME_URL= */
+ QString homeUrl() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#HOME_URL= */
+ QString documentationUrl() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#HOME_URL= */
+ QString supportUrl() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#HOME_URL= */
+ QString bugReportUrl() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#HOME_URL= */
+ QString privacyPolicyUrl() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#BUILD_ID= */
+ QString buildId() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#VARIANT= */
+ QString variant() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#VARIANT_ID= */
+ QString variantId() const;
+ /** @see https://www.freedesktop.org/software/systemd/man/os-release.html#LOGO= */
+ QString logo() const;
+
+ /**
+ * Extra keys are keys that are unknown or specified by a vendor.
+ */
+ QStringList extraKeys() const;
+
+ /** Extra values are values assoicated with keys that are unknown. */
+ QString extraValue(const QString &key) const;
+
+private:
+ Q_DISABLE_COPY(KOSRelease)
+
+ std::unique_ptr<class KOSReleasePrivate> const d;
+};
+
+#endif // KOSRELEASE_H
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2011 Nokia Corporation and/or its subsidiary(-ies).
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.1-only WITH Qt-LGPL-exception-1.1 OR LicenseRef-Qt-Commercial
+*/
+
+#include "kprocesslist.h"
+#include "kprocesslist_p.h"
+
+using namespace KProcessList;
+
+KProcessInfoPrivate::KProcessInfoPrivate()
+{
+}
+
+KProcessInfo::KProcessInfo()
+ : d_ptr(new KProcessInfoPrivate)
+{
+}
+
+KProcessInfo::KProcessInfo(qint64 pid, const QString &command, const QString &user)
+ : KProcessInfo(pid, command, command, user)
+{
+}
+
+KProcessInfo::KProcessInfo(qint64 pid, const QString &command, const QString &name, const QString &user)
+ : d_ptr(new KProcessInfoPrivate)
+{
+ d_ptr->valid = true;
+ d_ptr->pid = pid;
+ d_ptr->name = name;
+ d_ptr->command = command;
+ d_ptr->user = user;
+}
+
+KProcessInfo::KProcessInfo(const KProcessInfo &other)
+ : d_ptr(new KProcessInfoPrivate)
+{
+ *this = other;
+}
+
+KProcessInfo::~KProcessInfo()
+{
+}
+
+KProcessInfo &KProcessInfo::operator=(const KProcessInfo &other)
+{
+ d_ptr = other.d_ptr;
+ return *this;
+}
+
+bool KProcessInfo::isValid() const
+{
+ return d_ptr->valid;
+}
+
+qint64 KProcessInfo::pid() const
+{
+ return d_ptr->pid;
+}
+
+QString KProcessInfo::name() const
+{
+ return d_ptr->name;
+}
+
+QString KProcessInfo::command() const
+{
+ return d_ptr->command;
+}
+
+QString KProcessInfo::user() const
+{
+ return d_ptr->user;
+}
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2011 Nokia Corporation and/or its subsidiary(-ies).
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.1-only WITH Qt-LGPL-exception-1.1 OR LicenseRef-Qt-Commercial
+*/
+
+#ifndef KPROCESSLIST_H
+#define KPROCESSLIST_H
+
+#include <QList>
+#include <QSharedDataPointer>
+#include <QString>
+#include <kcoreaddons_export.h>
+
+namespace KProcessList
+{
+class KProcessInfoPrivate;
+
+/**
+ * @brief Contains information about a process. This class is usually not used alone but rather returned by
+ * processInfoList and processInfo. To check if the data contained in this class is valid use the isValid method.
+ * @since 5.58
+ */
+class KCOREADDONS_EXPORT KProcessInfo
+{
+public:
+ KProcessInfo();
+ KProcessInfo(qint64 pid, const QString &command, const QString &user);
+ KProcessInfo(qint64 pid, const QString &command, const QString &name, const QString &user);
+
+ KProcessInfo(const KProcessInfo &other);
+ ~KProcessInfo();
+ KProcessInfo &operator=(const KProcessInfo &other);
+ /**
+ * @brief If the KProcessInfo contains valid information. If it returns true the pid, name and user function
+ * returns valid information, otherwise they return value is undefined.
+ */
+ bool isValid() const;
+ /**
+ * @brief The pid of the process
+ */
+ qint64 pid() const;
+ /**
+ * @brief The name of the process. The class will try to get the full path to the executable file for the process
+ * but if it is not available the name of the process will be used instead.
+ * e.g /bin/ls
+ */
+ QString name() const;
+ /**
+ * @brief The username the process is running under.
+ */
+ QString user() const;
+ /**
+ * @brief The command line running this process
+ * e.g /bin/ls /some/path -R
+ * @since 5.61
+ */
+ QString command() const;
+
+private:
+ QSharedDataPointer<KProcessInfoPrivate> d_ptr;
+};
+
+typedef QList<KProcessInfo> KProcessInfoList;
+
+/**
+ * @brief Retrieves the list of currently active processes.
+ * @since 5.58
+ */
+KCOREADDONS_EXPORT KProcessInfoList processInfoList();
+
+/**
+ * @brief Retrieves process information for a specific process-id. If the process is not found a KProcessInfo with
+ * isValid == false will be returned.
+ * @param pid The process-id to retrieve information for.
+ * @since 5.58
+ */
+KCOREADDONS_EXPORT KProcessInfo processInfo(qint64 pid);
+
+} // KProcessList namespace
+
+#endif // KPROCESSLIST_H
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2011 Nokia Corporation and/or its subsidiary(-ies).
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.1-only WITH Qt-LGPL-exception-1.1 OR LicenseRef-Qt-Commercial
+*/
+
+#ifndef KPROCESSLIST_P_H
+#define KPROCESSLIST_P_H
+
+#include "kprocesslist.h"
+#include <QSharedData>
+
+namespace KProcessList
+{
+class KProcessInfoPrivate : public QSharedData
+{
+public:
+ KProcessInfoPrivate();
+
+ bool valid = false;
+ qint64 pid = -1;
+ QString name;
+ QString user;
+ QString command;
+};
+
+} // KProcessList namespace
+
+#endif // KPROCESSLIST_P_H
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2011 Nokia Corporation and/or its subsidiary(-ies).
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.1-only WITH Qt-LGPL-exception-1.1 OR LicenseRef-Qt-Commercial
+*/
+
+/*
+ * Implementation notes:
+ *
+ * This file implements KProcessInfo and KProcessInfoList via Linux /proc
+ * **or** via ps(1). If there's no /proc, it falls back to ps(1), usually.
+ *
+ * Although the code contains #ifdefs for FreeBSD (e.g. for ps(1) command-
+ * line arguments), FreeBSD should never use this code, only the
+ * procstat-based code in `kprocesslist_unix_procstat.cpp`.
+ */
+
+#include "kprocesslist.h"
+#include "kcoreaddons_debug.h"
+
+#include <QDebug>
+#include <QDir>
+#include <QProcess>
+
+#ifdef Q_OS_FREEBSD
+#error This KProcessInfo implementation is not supported on FreeBSD (use procstat)
+#endif
+
+using namespace KProcessList;
+
+namespace
+{
+bool isUnixProcessId(const QString &procname)
+{
+ for (int i = 0; i != procname.size(); ++i) {
+ if (!procname.at(i).isDigit())
+ return false;
+ }
+ return true;
+}
+
+// Determine UNIX processes by running ps
+KProcessInfoList unixProcessListPS()
+{
+ KProcessInfoList rc;
+ QProcess psProcess;
+ const QStringList args{
+ QStringLiteral("-e"),
+ QStringLiteral("-o"),
+#ifdef Q_OS_MAC
+ // command goes last, otherwise it is cut off
+ QStringLiteral("pid state user comm command"),
+#else
+#ifdef Q_OS_FREEBSD
+ // "comm" is the bare command, e.g. "bash", "plasmashell", "ps"
+ // "args" is the command and arguments, e.g. "ps -e -o pid,state,user,comm,args"
+ //
+ // Keyword "cmd" is unknown, and "command" spits out the entire
+ // environment of the process as well.
+ QStringLiteral("pid,state,user,comm,args"),
+#else
+ QStringLiteral("pid,state,user,comm,cmd"),
+#endif
+#endif
+ };
+ psProcess.start(QStringLiteral("ps"), args);
+ if (!psProcess.waitForStarted()) {
+ qCWarning(KCOREADDONS_DEBUG) << "Failed to execute ps" << args;
+ return rc;
+ }
+ psProcess.waitForFinished();
+ const QByteArray output = psProcess.readAllStandardOutput();
+ const QByteArray errorOutput = psProcess.readAllStandardError();
+ if (!errorOutput.isEmpty()) {
+ qCWarning(KCOREADDONS_DEBUG) << "ps said" << errorOutput;
+ }
+ // Split "457 S+ /Users/foo.app"
+ const QStringList lines = QString::fromLocal8Bit(output).split(QLatin1Char('\n'));
+ const int lineCount = lines.size();
+ const QChar blank = QLatin1Char(' ');
+ for (int l = 1; l < lineCount; l++) { // Skip header
+ const QString line = lines.at(l).simplified();
+ // we can't just split on blank as the process name might
+ // contain them
+ const int endOfPid = line.indexOf(blank);
+ const int endOfState = line.indexOf(blank, endOfPid + 1);
+ const int endOfUser = line.indexOf(blank, endOfState + 1);
+ const int endOfName = line.indexOf(blank, endOfUser + 1);
+
+ if (endOfPid >= 0 && endOfState >= 0 && endOfUser >= 0) {
+ qint64 pid = line.leftRef(endOfPid).toUInt();
+ QString user = line.mid(endOfState + 1, endOfUser - endOfState - 1);
+ QString name = line.mid(endOfUser + 1, endOfName - endOfUser - 1);
+ QString command = line.right(line.size() - endOfName - 1);
+ rc.push_back(KProcessInfo(pid, command, name, user));
+ }
+ }
+
+ return rc;
+}
+
+bool getProcessInfo(const QString &procId, KProcessInfo &processInfo)
+{
+ if (!isUnixProcessId(procId))
+ return false;
+#ifdef Q_OS_FREEBSD
+ QString statusFileName(QStringLiteral("/status"));
+#else
+ QString statusFileName(QStringLiteral("/stat"));
+#endif
+ QString filename = QStringLiteral("/proc/");
+ filename += procId;
+ filename += statusFileName;
+ QFile file(filename);
+ if (!file.open(QIODevice::ReadOnly))
+ return false; // process may have exited
+
+ const QStringList data = QString::fromLocal8Bit(file.readAll()).split(QLatin1Char(' '));
+ if (data.length() < 2) {
+ return false;
+ }
+ qint64 pid = procId.toUInt();
+ QString name = data.at(1);
+ if (name.startsWith(QLatin1Char('(')) && name.endsWith(QLatin1Char(')'))) {
+ name.chop(1);
+ name.remove(0, 1);
+ }
+ // State is element 2
+ // PPID is element 3
+ QString user = QFileInfo(file).owner();
+ file.close();
+
+ QString command = name;
+
+ QFile cmdFile(QLatin1String("/proc/") + procId + QLatin1String("/cmdline"));
+ if (cmdFile.open(QFile::ReadOnly)) {
+ QByteArray cmd = cmdFile.readAll();
+
+ if (!cmd.isEmpty()) {
+ // extract non-truncated name from cmdline
+ int zeroIndex = cmd.indexOf('\0');
+ int processNameStart = cmd.lastIndexOf('/', zeroIndex);
+ if (processNameStart == -1) {
+ processNameStart = 0;
+ } else {
+ processNameStart++;
+ }
+ name = QString::fromLocal8Bit(cmd.mid(processNameStart, zeroIndex - processNameStart));
+
+ cmd.replace('\0', ' ');
+ command = QString::fromLocal8Bit(cmd).trimmed();
+ }
+ }
+ cmdFile.close();
+ processInfo = KProcessInfo(pid, command, name, user);
+ return true;
+}
+
+} // unnamed namespace
+
+// Determine UNIX processes by reading "/proc". Default to ps if
+// it does not exist
+KProcessInfoList KProcessList::processInfoList()
+{
+ const QDir procDir(QStringLiteral("/proc/"));
+ if (!procDir.exists())
+ return unixProcessListPS();
+ const QStringList procIds = procDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
+#ifdef Q_OS_FREEBSD
+ if (procIds.isEmpty())
+ return unixProcessListPS();
+#endif
+ KProcessInfoList rc;
+ rc.reserve(procIds.size());
+ for (const QString &procId : procIds) {
+ KProcessInfo processInfo;
+ if (getProcessInfo(procId, processInfo)) {
+ rc.push_back(processInfo);
+ }
+ }
+ return rc;
+}
+
+// Determine UNIX process by reading "/proc".
+//
+// TODO: Use ps if "/proc" does not exist or is bogus; use code
+// from unixProcessListPS() but add a `-p pid` argument.
+//
+KProcessInfo KProcessList::processInfo(qint64 pid)
+{
+ KProcessInfo processInfo;
+ getProcessInfo(QString::number(pid), processInfo);
+ return processInfo;
+}
--- /dev/null
+/*
+
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2019 Tobias C. Berner <tcberner@FreeBSD.org>
+
+ SPDX-License-Identifier: LGPL-2.1-only
+*/
+
+#include "kprocesslist.h"
+#include "kprocesslist_unix_procstat_p.h"
+
+#include <QDir>
+#include <QProcess>
+
+using namespace KProcessList;
+
+// Determine UNIX processes by using the procstat library
+KProcessInfoList KProcessList::processInfoList()
+{
+ KProcessInfoList rc;
+
+ ProcStat pstat;
+ if (!pstat) {
+ return rc;
+ }
+
+ ProcStatProcesses procs(pstat);
+ for (const auto &process_info : procs) {
+ rc.push_back(process_info);
+ }
+
+ return rc;
+}
+
+KProcessInfo KProcessList::processInfo(qint64 pid)
+{
+ KProcessInfoList processInfoList = KProcessList::processInfoList();
+ auto testProcessIterator = std::find_if(processInfoList.begin(), processInfoList.end(), [pid](const KProcessList::KProcessInfo &info) {
+ return info.pid() == pid;
+ });
+ if (testProcessIterator != processInfoList.end()) {
+ return *testProcessIterator;
+ }
+ return KProcessInfo();
+}
--- /dev/null
+/*
+
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2019 Tobias C. Berner <tcberner@FreeBSD.org>
+
+ SPDX-License-Identifier: LGPL-2.1-only
+*/
+
+#pragma once
+
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/types.h>
+#include <sys/user.h>
+
+#include <sys/queue.h> // Must be included before libprocstat.h, otherwise this fails to build on FreeBSD
+
+#include <libprocstat.h>
+
+namespace KProcessList
+{
+struct ProcStat {
+public:
+ struct procstat *pstat;
+ ProcStat()
+ {
+ pstat = procstat_open_sysctl();
+ }
+
+ ~ProcStat()
+ {
+ procstat_close(pstat);
+ }
+
+ operator bool() const
+ {
+ return pstat;
+ }
+};
+
+struct ProcStatProcesses {
+private:
+ ProcStat &parent;
+ unsigned int proc_count;
+ struct kinfo_proc *procs;
+
+public:
+ ProcStatProcesses(ProcStat &pstat)
+ : parent(pstat)
+ {
+ procs = procstat_getprocs(parent.pstat, KERN_PROC_PROC, 0, &proc_count);
+ }
+
+ ~ProcStatProcesses()
+ {
+ if (procs) {
+ procstat_freeprocs(parent.pstat, procs);
+ }
+ }
+
+ operator bool() const
+ {
+ return procs && proc_count > 0;
+ }
+
+ unsigned int count() const
+ {
+ return proc_count;
+ }
+
+ class ProcessIterator
+ {
+ private:
+ const ProcStatProcesses &processes;
+ unsigned int pos;
+
+ public:
+ ProcessIterator(const ProcStatProcesses &processes, unsigned int pos)
+ : processes(processes)
+ , pos(pos){};
+
+ bool operator!=(const ProcessIterator &other) const
+ {
+ return pos != other.pos;
+ }
+
+ ProcessIterator &operator++()
+ {
+ if (pos < processes.count()) {
+ ++pos;
+ }
+ return *this;
+ }
+
+ const KProcessInfo operator*()
+ {
+ QStringList command_line;
+ QString command;
+ char pathname[PATH_MAX];
+ struct kinfo_proc *proc = &processes.procs[pos];
+ if (procstat_getpathname(processes.parent.pstat, proc, pathname, sizeof(pathname)) != 0) {
+ command = QString::fromLocal8Bit(pathname);
+ } else {
+ command = QString::fromLocal8Bit(proc->ki_comm);
+ }
+
+ char **args;
+ args = procstat_getargv(processes.parent.pstat, proc, 0);
+ if (args) {
+ for (int i = 0; args[i] != nullptr; i++) {
+ command_line << QString::fromLocal8Bit(args[i]);
+ }
+ }
+
+ pid_t pid = proc->ki_pid;
+ QString user = QString::fromLocal8Bit(proc->ki_login);
+ return KProcessInfo(pid, command_line.join(QString::fromLocal8Bit(" ")), command, user);
+ }
+ };
+
+ ProcessIterator begin() const
+ {
+ return ProcessIterator(*this, 0);
+ }
+ ProcessIterator end() const
+ {
+ return ProcessIterator(*this, this->count());
+ }
+};
+}
--- /dev/null
+/*
+ This file is part of the KDE Frameworks
+
+ SPDX-FileCopyrightText: 2011 Nokia Corporation and/or its subsidiary(-ies).
+ SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
+
+ SPDX-License-Identifier: LGPL-2.1-only WITH Qt-LGPL-exception-1.1 OR LicenseRef-Qt-Commercial
+*/
+
+#include "kprocesslist.h"
+
+#include <QLibrary>
+#include <algorithm>
+
+// Enable Win API of XP SP1 and later
+#ifdef Q_OS_WIN
+#if !defined(_WIN32_WINNT)
+#define _WIN32_WINNT 0x0502
+#endif
+#include <qt_windows.h>
+#if !defined(PROCESS_SUSPEND_RESUME) // Check flag for MinGW
+#define PROCESS_SUSPEND_RESUME (0x0800)
+#endif // PROCESS_SUSPEND_RESUME
+#endif // Q_OS_WIN
+
+#include <psapi.h>
+#include <tlhelp32.h>
+
+using namespace KProcessList;
+
+// Resolve QueryFullProcessImageNameW out of kernel32.dll due
+// to incomplete MinGW import libs and it not being present
+// on Windows XP.
+static inline BOOL queryFullProcessImageName(HANDLE h, DWORD flags, LPWSTR buffer, DWORD *size)
+{
+ // Resolve required symbols from the kernel32.dll
+ typedef BOOL(WINAPI * QueryFullProcessImageNameWProtoType)(HANDLE, DWORD, LPWSTR, PDWORD);
+ static QueryFullProcessImageNameWProtoType queryFullProcessImageNameW = 0;
+ if (!queryFullProcessImageNameW) {
+ QLibrary kernel32Lib(QLatin1String("kernel32.dll"), 0);
+ if (kernel32Lib.isLoaded() || kernel32Lib.load()) {
+ queryFullProcessImageNameW = (QueryFullProcessImageNameWProtoType)kernel32Lib.resolve("QueryFullProcessImageNameW");
+ }
+ }
+ if (!queryFullProcessImageNameW)
+ return FALSE;
+ // Read out process
+ return (*queryFullProcessImageNameW)(h, flags, buffer, size);
+}
+
+struct ProcessInfo {
+ QString processOwner;
+};
+
+static inline ProcessInfo winProcessInfo(DWORD processId)
+{
+ ProcessInfo pi;
+ HANDLE handle = OpenProcess(PROCESS_QUERY_INFORMATION, TOKEN_READ, processId);
+ if (handle == INVALID_HANDLE_VALUE)
+ return pi;
+ HANDLE processTokenHandle = NULL;
+ if (!OpenProcessToken(handle, TOKEN_READ, &processTokenHandle) || !processTokenHandle)
+ return pi;
+
+ DWORD size = 0;
+ GetTokenInformation(processTokenHandle, TokenUser, NULL, 0, &size);
+
+ if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
+ QByteArray buf;
+ buf.resize(size);
+ PTOKEN_USER userToken = reinterpret_cast<PTOKEN_USER>(buf.data());
+ if (userToken && GetTokenInformation(processTokenHandle, TokenUser, userToken, size, &size)) {
+ SID_NAME_USE sidNameUse;
+ TCHAR user[MAX_PATH] = {0};
+ DWORD userNameLength = MAX_PATH;
+ TCHAR domain[MAX_PATH] = {0};
+ DWORD domainNameLength = MAX_PATH;
+
+ if (LookupAccountSid(NULL, userToken->User.Sid, user, &userNameLength, domain, &domainNameLength, &sidNameUse))
+ pi.processOwner = QString::fromUtf16(reinterpret_cast<const ushort *>(user));
+ }
+ }
+
+ CloseHandle(processTokenHandle);
+ CloseHandle(handle);
+ return pi;
+}
+
+KProcessInfoList KProcessList::processInfoList()
+{
+ KProcessInfoList rc;
+
+ PROCESSENTRY32 pe;
+ pe.dwSize = sizeof(PROCESSENTRY32);
+ HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+ if (snapshot == INVALID_HANDLE_VALUE)
+ return rc;
+
+ for (bool hasNext = Process32First(snapshot, &pe); hasNext; hasNext = Process32Next(snapshot, &pe)) {
+ const ProcessInfo processInf = winProcessInfo(pe.th32ProcessID);
+ rc.push_back(KProcessInfo(pe.th32ProcessID, QString::fromUtf16(reinterpret_cast<ushort *>(pe.szExeFile)), processInf.processOwner));
+ }
+ CloseHandle(snapshot);
+ return rc;
+}
+
+KProcessInfo KProcessList::processInfo(qint64 pid)
+{
+ KProcessInfoList processInfoList = KProcessList::processInfoList();
+ auto testProcessIterator = std::find_if(processInfoList.begin(), processInfoList.end(), [pid](const KProcessList::KProcessInfo &info) {
+ return info.pid() == pid;
+ });
+ if (testProcessIterator != processInfoList.end()) {
+ return *testProcessIterator;
+ }
+ return KProcessInfo();
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2003, 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kshell.h"
+#include "kshell_p.h"
+#include "kuser.h"
+
+#include <QDir>
+
+QString KShell::homeDir(const QString &user)
+{
+ if (user.isEmpty()) {
+ return QDir::homePath();
+ }
+ return KUser(user).homeDir();
+}
+
+QString KShell::joinArgs(const QStringList &args)
+{
+ QString ret;
+ for (QStringList::ConstIterator it = args.begin(); it != args.end(); ++it) {
+ if (!ret.isEmpty()) {
+ ret.append(QLatin1Char(' '));
+ }
+ ret.append(quoteArg(*it));
+ }
+ return ret;
+}
+
+#ifdef Q_OS_WIN
+#define ESCAPE '^'
+#else
+#define ESCAPE '\\'
+#endif
+
+QString KShell::tildeExpand(const QString &fname)
+{
+ if (!fname.isEmpty() && fname[0] == QLatin1Char('~')) {
+ int pos = fname.indexOf(QLatin1Char('/'));
+ if (pos < 0) {
+ return homeDir(fname.mid(1));
+ }
+ QString ret = homeDir(fname.mid(1, pos - 1));
+ if (!ret.isNull()) {
+ ret += fname.midRef(pos);
+ }
+ return ret;
+ } else if (fname.length() > 1 && fname[0] == QLatin1Char(ESCAPE) && fname[1] == QLatin1Char('~')) {
+ return fname.mid(1);
+ }
+ return fname;
+}
+
+QString KShell::tildeCollapse(const QString &path)
+{
+ if (!path.isEmpty()) {
+ const auto homePath = QDir::homePath();
+ if (path.startsWith(homePath)) {
+ auto newPath = path;
+ newPath.replace(0, homePath.length(), QLatin1Char('~'));
+ return newPath;
+ }
+ }
+ return path;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2003, 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#ifndef KSHELL_H
+#define KSHELL_H
+
+#include <QStringList>
+#include <kcoreaddons_export.h>
+#include <qglobal.h>
+
+class QString;
+
+/**
+ * \namespace KShell
+ * Emulates some basic system shell functionality.
+ * @see KStringHandler
+ */
+namespace KShell
+{
+/**
+ * Flags for splitArgs().
+ * @see Options
+ */
+enum Option {
+ NoOptions = 0,
+
+ /**
+ * Perform tilde expansion.
+ * On Windows, this flag is ignored, as the Windows shell has no
+ * equivalent functionality.
+ */
+ TildeExpand = 1,
+
+ /**
+ * Put the parser into full shell mode and bail out if a too complex
+ * construct is encountered.
+ * A particular purpose of this flag is finding out whether the
+ * command line being split would be executable directly (via
+ * KProcess::setProgram()) or whether it needs to be run through
+ * a real shell (via KProcess::setShellCommand()). Note, however,
+ * that shell builtins are @em not recognized - you need to do that
+ * yourself (compare with a list of known commands or verify that an
+ * executable exists for the named command).
+ *
+ * Meta characters that cause a bail-out are the command separators
+ * @c semicolon and @c ampersand, the redirection symbols @c less-than,
+ * @c greater-than and the @c pipe @c symbol and the grouping symbols
+ * opening and closing @c parentheses.
+ *
+ * Further meta characters on *NIX are the grouping symbols
+ * opening and closing @c braces, the command substitution symbol
+ * @c backquote, the generic substitution symbol @c dollar (if
+ * not followed by an apostrophe), the wildcards @c asterisk,
+ * @c question @c mark and opening and closing @c square @c brackets
+ * and the comment symbol @c hash @c mark.
+ * Additionally, a variable assignment in the first word is recognized.
+ *
+ * A further meta character on Windows is the environment variable
+ * expansion symbol @c percent. Occurrences of @c \%PERCENT_SIGN% as
+ * inserted by quoteArg() are converted back and cause no bail-out,
+ * though.
+ */
+ AbortOnMeta = 2,
+};
+/**
+ * Stores a combination of #Option values.
+ */
+Q_DECLARE_FLAGS(Options, Option)
+Q_DECLARE_OPERATORS_FOR_FLAGS(Options)
+
+/**
+ * Status codes from splitArgs()
+ */
+enum Errors {
+ /**
+ * Success.
+ */
+ NoError = 0,
+
+ /**
+ * Indicates a parsing error, like an unterminated quoted string.
+ */
+ BadQuoting,
+
+ /**
+ * The AbortOnMeta flag was set and an unhandled shell meta character
+ * was encountered.
+ */
+ FoundMeta,
+};
+
+/**
+ * Splits @p cmd according to system shell word splitting and quoting rules.
+ * Can optionally perform tilde expansion and/or abort if it finds shell
+ * meta characters it cannot process.
+ *
+ * On *NIX the behavior is based on the POSIX shell and bash:
+ * - Whitespace splits tokens
+ * - The backslash quotes the following character
+ * - A string enclosed in single quotes is not split. No shell meta
+ * characters are interpreted.
+ * - A string enclosed in double quotes is not split. Within the string,
+ * the backslash quotes shell meta characters - if it is followed
+ * by a "meaningless" character, the backslash is output verbatim.
+ * - A string enclosed in $'' is not split. Within the string, the
+ * backslash has a similar meaning to the one in C strings. Consult
+ * the bash manual for more information.
+ *
+ * On Windows, the behavior is defined by the Microsoft C runtime. Qt and
+ * many other implementations comply with this standard, but many do not.
+ * - Whitespace splits tokens
+ * - A string enclosed in double quotes is not split
+ * - 2N double quotes within a quoted string yield N literal quotes.
+ * This is not documented on MSDN.
+ * - Backslashes have special semantics iff they are followed by a double
+ * quote:
+ * - 2N backslashes + double quote => N backslashes and begin/end quoting
+ * - 2N+1 backslashes + double quote => N backslashes + literal quote
+ *
+ * If AbortOnMeta is used on Windows, this function applies cmd shell
+ * semantics before proceeding with word splitting:
+ * - Cmd ignores @em all special chars between double quotes.
+ * Note that the quotes are @em not removed at this stage - the
+ * tokenization rules described above still apply.
+ * - The @c circumflex is the escape char for everything including
+ * itself.
+ *
+ * @param cmd the command to split
+ * @param flags operation flags, see \ref Option
+ * @param err if not NULL, a status code will be stored at the pointer
+ * target, see \ref Errors
+ * @return a list of unquoted words or an empty list if an error occurred
+ */
+KCOREADDONS_EXPORT QStringList splitArgs(const QString &cmd, Options flags = NoOptions, Errors *err = nullptr);
+
+/**
+ * Quotes and joins @p args together according to system shell rules.
+ *
+ * If the output is fed back into splitArgs(), the AbortOnMeta flag
+ * needs to be used on Windows. On *NIX, no such requirement exists.
+ *
+ * See quoteArg() for more info.
+ *
+ * @param args a list of strings to quote and join
+ * @return a command suitable for shell execution
+ */
+KCOREADDONS_EXPORT QString joinArgs(const QStringList &args);
+
+/**
+ * Quotes @p arg according to system shell rules.
+ *
+ * This function can be used to quote an argument string such that
+ * the shell processes it properly. This is e.g. necessary for
+ * user-provided file names which may contain spaces or quotes.
+ * It also prevents expansion of wild cards and environment variables.
+ *
+ * On *NIX, the output is POSIX shell compliant.
+ * On Windows, it is compliant with the argument splitting code of the
+ * Microsoft C runtime and the cmd shell used together.
+ * Occurrences of the @c percent @c sign are replaced with
+ * @c \%PERCENT_SIGN% to prevent spurious variable expansion;
+ * related KDE functions are prepared for this.
+ *
+ * @param arg the argument to quote
+ * @return the quoted argument
+ */
+KCOREADDONS_EXPORT QString quoteArg(const QString &arg);
+
+/**
+ * Performs tilde expansion on @p path. Interprets "~/path" and
+ * "~user/path". If the path starts with an escaped tilde ("\~" on UNIX,
+ * "^~" on Windows), the escape char is removed and the path is returned
+ * as is.
+ *
+ * Note that if @p path starts with a tilde but cannot be properly expanded,
+ * this function will return an empty string.
+ *
+ * @param path the path to tilde-expand
+ * @return the expanded path
+ */
+KCOREADDONS_EXPORT QString tildeExpand(const QString &path);
+
+/**
+ * Performs tilde collapse on @p path. If path did not start by the user
+ * homedir returns path unchanged.
+ *
+ * @param path the path to tilde-collpase
+ * @return the collapsed path
+ * @since 5.67
+ */
+KCOREADDONS_EXPORT QString tildeCollapse(const QString &path);
+}
+
+#endif /* KSHELL_H */
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2008 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KSHELL_P_H
+#define KSHELL_P_H
+
+class QString;
+
+namespace KShell
+{
+QString homeDir(const QString &user);
+QString quoteArgInternal(const QString &arg, bool _inquote);
+
+}
+
+#define PERCENT_VARIABLE QLatin1String("PERCENT_SIGN")
+#define PERCENT_ESCAPE QLatin1String("%PERCENT_SIGN%")
+
+#endif /* KSHELL_P_H */
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2003, 2007 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kshell.h"
+#include "kshell_p.h"
+
+#include <kuser.h>
+
+#include <QChar>
+#include <QStringList>
+
+static int fromHex(QChar cUnicode)
+{
+ char c = cUnicode.toLatin1();
+
+ if (c >= '0' && c <= '9') {
+ return c - '0';
+ } else if (c >= 'A' && c <= 'F') {
+ return c - 'A' + 10;
+ } else if (c >= 'a' && c <= 'f') {
+ return c - 'a' + 10;
+ }
+ return -1;
+}
+
+inline static bool isQuoteMeta(QChar cUnicode)
+{
+ char c = cUnicode.toLatin1();
+ return c == '\\' || c == '\'' || c == '"' || c == '$';
+}
+
+inline static bool isMeta(QChar cUnicode)
+{
+ static const uchar iqm[] = {0x00, 0x00, 0x00, 0x00, 0xdc, 0x07, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x38}; // \'"$`<>|;&(){}*?#[]
+
+ uint c = cUnicode.unicode();
+
+ return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
+}
+
+QStringList KShell::splitArgs(const QString &args, Options flags, Errors *err)
+{
+ QStringList ret;
+ bool firstword = flags & AbortOnMeta;
+
+ for (int pos = 0;;) {
+ QChar c;
+ do {
+ if (pos >= args.length()) {
+ goto okret;
+ }
+ c = args.unicode()[pos++];
+ } while (c == QLatin1Char(' '));
+ QString cret;
+ if ((flags & TildeExpand) && c == QLatin1Char('~')) {
+ int opos = pos;
+ for (;; pos++) {
+ if (pos >= args.length()) {
+ break;
+ }
+ c = args.unicode()[pos];
+ if (c == QLatin1Char('/') || c == QLatin1Char(' ')) {
+ break;
+ }
+ if (isQuoteMeta(c)) {
+ pos = opos;
+ c = QLatin1Char('~');
+ goto notilde;
+ }
+ if ((flags & AbortOnMeta) && isMeta(c)) {
+ goto metaerr;
+ }
+ }
+ QString ccret = homeDir(args.mid(opos, pos - opos));
+ if (ccret.isEmpty()) {
+ pos = opos;
+ c = QLatin1Char('~');
+ goto notilde;
+ }
+ if (pos >= args.length()) {
+ ret += ccret;
+ goto okret;
+ }
+ pos++;
+ if (c == QLatin1Char(' ')) {
+ ret += ccret;
+ firstword = false;
+ continue;
+ }
+ cret = ccret;
+ }
+ // before the notilde label, as a tilde does not match anyway
+ if (firstword) {
+ if (c == QLatin1Char('_') //
+ || (c >= QLatin1Char('A') && c <= QLatin1Char('Z')) //
+ || (c >= QLatin1Char('a') && c <= QLatin1Char('z'))) {
+ int pos2 = pos;
+ QChar cc;
+ do {
+ if (pos2 >= args.length()) {
+ // Exactly one word
+ ret += args.mid(pos - 1);
+ goto okret;
+ }
+ cc = args.unicode()[pos2++];
+ } while (cc == QLatin1Char('_') /* clang-format off */
+ || (cc >= QLatin1Char('A') && cc <= QLatin1Char('Z'))
+ || (cc >= QLatin1Char('a') && cc <= QLatin1Char('z'))
+ || (cc >= QLatin1Char('0') && cc <= QLatin1Char('9'))); /* clang-format on */
+ if (cc == QLatin1Char('=')) {
+ goto metaerr;
+ }
+ }
+ }
+ notilde:
+ do {
+ if (c == QLatin1Char('\'')) {
+ int spos = pos;
+ do {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ } while (c != QLatin1Char('\''));
+ cret += args.midRef(spos, pos - spos - 1);
+ } else if (c == QLatin1Char('"')) {
+ for (;;) {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ if (c == QLatin1Char('"')) {
+ break;
+ }
+ if (c == QLatin1Char('\\')) {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ if (c != QLatin1Char('"') //
+ && c != QLatin1Char('\\') //
+ && !((flags & AbortOnMeta) && (c == QLatin1Char('$') || c == QLatin1Char('`')))) {
+ cret += QLatin1Char('\\');
+ }
+ } else if ((flags & AbortOnMeta) && (c == QLatin1Char('$') || c == QLatin1Char('`'))) {
+ goto metaerr;
+ }
+ cret += c;
+ }
+ } else if (c == QLatin1Char('$') && pos < args.length() && args.unicode()[pos] == QLatin1Char('\'')) {
+ pos++;
+ for (;;) {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ if (c == QLatin1Char('\'')) {
+ break;
+ }
+ if (c == QLatin1Char('\\')) {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ switch (c.toLatin1()) {
+ case 'a':
+ cret += QLatin1Char('\a');
+ break;
+ case 'b':
+ cret += QLatin1Char('\b');
+ break;
+ case 'e':
+ cret += QLatin1Char('\033');
+ break;
+ case 'f':
+ cret += QLatin1Char('\f');
+ break;
+ case 'n':
+ cret += QLatin1Char('\n');
+ break;
+ case 'r':
+ cret += QLatin1Char('\r');
+ break;
+ case 't':
+ cret += QLatin1Char('\t');
+ break;
+ case '\\':
+ cret += QLatin1Char('\\');
+ break;
+ case '\'':
+ cret += QLatin1Char('\'');
+ break;
+ case 'c':
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ cret += QChar::fromLatin1(args.unicode()[pos++].toLatin1() & 31);
+ break;
+ case 'x': {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ int hv = fromHex(args.unicode()[pos++]);
+ if (hv < 0) {
+ goto quoteerr;
+ }
+ if (pos < args.length()) {
+ int hhv = fromHex(args.unicode()[pos]);
+ if (hhv > 0) {
+ hv = hv * 16 + hhv;
+ pos++;
+ }
+ cret += QChar(hv);
+ }
+ break;
+ }
+ default:
+ if (c.toLatin1() >= '0' && c.toLatin1() <= '7') {
+ char cAscii = c.toLatin1();
+ int hv = cAscii - '0';
+ for (int i = 0; i < 2; i++) {
+ if (pos >= args.length()) {
+ break;
+ }
+ c = args.unicode()[pos];
+ if (c.toLatin1() < '0' || c.toLatin1() > '7') {
+ break;
+ }
+ hv = hv * 8 + (c.toLatin1() - '0');
+ pos++;
+ }
+ cret += QChar(hv);
+ } else {
+ cret += QLatin1Char('\\');
+ cret += c;
+ }
+ break;
+ }
+ } else {
+ cret += c;
+ }
+ }
+ } else {
+ if (c == QLatin1Char('\\')) {
+ if (pos >= args.length()) {
+ goto quoteerr;
+ }
+ c = args.unicode()[pos++];
+ } else if ((flags & AbortOnMeta) && isMeta(c)) {
+ goto metaerr;
+ }
+ cret += c;
+ }
+ if (pos >= args.length()) {
+ break;
+ }
+ c = args.unicode()[pos++];
+ } while (c != QLatin1Char(' '));
+ ret += cret;
+ firstword = false;
+ }
+
+okret:
+ if (err) {
+ *err = NoError;
+ }
+ return ret;
+
+quoteerr:
+ if (err) {
+ *err = BadQuoting;
+ }
+ return QStringList();
+
+metaerr:
+ if (err) {
+ *err = FoundMeta;
+ }
+ return QStringList();
+}
+
+inline static bool isSpecial(QChar cUnicode)
+{
+ static const uchar iqm[] = {0xff, 0xff, 0xff, 0xff, 0xdf, 0x07, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x78}; // 0-32 \'"$`<>|;&(){}*?#!~[]
+
+ uint c = cUnicode.unicode();
+ return ((c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7))));
+}
+
+QString KShell::quoteArg(const QString &arg)
+{
+ if (!arg.length()) {
+ return QStringLiteral("''");
+ }
+ for (int i = 0; i < arg.length(); i++)
+ if (isSpecial(arg.unicode()[i])) {
+ QChar q(QLatin1Char('\''));
+ return q + QString(arg).replace(q, QLatin1String("'\\''")) + q;
+ }
+ return arg;
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 2007 Bernhard Loos <nhuh.put@web.de>
+ SPDX-FileCopyrightText: 2007, 2008 Oswald Buddenhagen <ossi@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kshell.h"
+#include "kshell_p.h"
+
+#include <QDir>
+#include <QRegularExpression>
+#include <QString>
+#include <QStringList>
+
+/*
+ * A short introduction into cmd semantics:
+ * - Variable expansion is done first, without regard to *any* escaping -
+ * if something looks like an existing variable, it is replaced.
+ * - Then follows regular tokenization by the shell. &, &&, | and || are
+ * command delimiters. ( and ) are command grouping operators; they are
+ * recognized only a the start resp. end of a command; mismatched )s are
+ * an error if any (s are present. <, > are just like under UNIX - they can
+ * appear *anywhere* in a command, perform their function and are cut out.
+ * @ at the start of a command is eaten (local echo off - no function as
+ * far as cmd /c is concerned). : at the start of a command declares a label,
+ * which effectively means the remainder of the line is a comment - note that
+ * command separators are not recognized past that point.
+ * ^ is the escape char for everything including itself.
+ * cmd ignores *all* special chars between double quotes, so there is no
+ * way to escape the closing quote. Note that the quotes are *not* removed
+ * from the resulting command line.
+ * - Then follows delayed variable expansion if it is enabled and at least
+ * one exclamation mark is present. This involves another layer of ^
+ * escaping, regardless of quotes. (Win2k+)
+ * - Then follows argument splitting as described in
+ * http://msdn2.microsoft.com/en-us/library/ms880421.aspx .
+ * Note that this is done by the called application and therefore might
+ * be subject to completely different semantics, in fact.
+ */
+
+inline static bool isMetaChar(ushort c)
+{
+ static const uchar iqm[] = {0x00, 0x00, 0x00, 0x00, 0x40, 0x03, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}; // &()<>|
+
+ return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
+}
+
+inline static bool isSpecialChar(ushort c)
+{
+ // Chars that should be quoted (TM). This includes:
+ // - control chars & space
+ // - the shell meta chars &()<>^|
+ // - the potential separators ,;=
+ static const uchar iqm[] = {0xff, 0xff, 0xff, 0xff, 0x41, 0x13, 0x00, 0x78, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10};
+
+ return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
+}
+
+inline static bool isWhiteSpace(ushort c)
+{
+ return c == ' ' || c == '\t';
+}
+
+QStringList KShell::splitArgs(const QString &_args, Options flags, Errors *err)
+{
+ QString args(_args);
+ QStringList ret;
+
+ const QLatin1Char bs('\\'), dq('\"');
+
+ if (flags & AbortOnMeta) {
+ args.remove(PERCENT_ESCAPE);
+ if (args.indexOf(QLatin1Char('%')) >= 0) {
+ if (err) {
+ *err = FoundMeta;
+ }
+ return QStringList();
+ }
+
+ args = _args;
+ args.replace(PERCENT_ESCAPE, QLatin1String("%"));
+
+ if (!args.isEmpty() && args[0].unicode() == '@') {
+ args.remove(0, 1);
+ }
+
+ for (int p = 0; p < args.length(); p++) {
+ ushort c = args[p].unicode();
+ if (c == '^') {
+ args.remove(p, 1);
+ } else if (c == '"') {
+ while (++p < args.length() && args[p].unicode() != '"')
+ ;
+ } else if (isMetaChar(c)) {
+ if (err) {
+ *err = FoundMeta;
+ }
+ return QStringList();
+ }
+ }
+ }
+
+ if (err) {
+ *err = NoError;
+ }
+
+ int p = 0;
+ const int length = args.length();
+ for (;;) {
+ while (p < length && isWhiteSpace(args[p].unicode())) {
+ ++p;
+ }
+ if (p == length) {
+ return ret;
+ }
+
+ QString arg;
+ bool inquote = false;
+ for (;;) {
+ bool copy = true; // copy this char
+ int bslashes = 0; // number of preceding backslashes to insert
+ while (p < length && args[p] == bs) {
+ ++p;
+ ++bslashes;
+ }
+ if (p < length && args[p] == dq) {
+ if (bslashes % 2 == 0) {
+ // Even number of backslashes, so the quote is not escaped.
+ if (inquote) {
+ if (p + 1 < length && args[p + 1] == dq) {
+ // Two consecutive quotes make a literal quote.
+ // This is not documented on MSDN.
+ ++p;
+ } else {
+ // Closing quote
+ copy = false;
+ inquote = !inquote;
+ }
+ } else {
+ // Opening quote
+ copy = false;
+ inquote = !inquote;
+ }
+ }
+ bslashes /= 2;
+ }
+
+ while (--bslashes >= 0) {
+ arg.append(bs);
+ }
+
+ if (p == length || (!inquote && isWhiteSpace(args[p].unicode()))) {
+ ret.append(arg);
+ if (inquote) {
+ if (err) {
+ *err = BadQuoting;
+ }
+ return QStringList();
+ }
+ break;
+ }
+
+ if (copy) {
+ arg.append(args[p]);
+ }
+ ++p;
+ }
+ }
+ // not reached
+}
+
+QString KShell::quoteArgInternal(const QString &arg, bool _inquote)
+{
+ // Escape quotes, preceding backslashes are doubled. Surround with quotes.
+ // Note that cmd does not understand quote escapes in quoted strings,
+ // so the quoting needs to be "suspended".
+ const QLatin1Char bs('\\'), dq('\"');
+ QString ret;
+ bool inquote = _inquote;
+ int bslashes = 0;
+ for (int p = 0; p < arg.length(); p++) {
+ if (arg[p] == bs) {
+ bslashes++;
+ } else if (arg[p] == dq) {
+ if (inquote) {
+ ret.append(dq);
+ inquote = false;
+ }
+ for (; bslashes; bslashes--) {
+ ret.append(QLatin1String("\\\\"));
+ }
+ ret.append(QLatin1String("\\^\""));
+ } else {
+ if (!inquote) {
+ ret.append(dq);
+ inquote = true;
+ }
+ for (; bslashes; bslashes--) {
+ ret.append(bs);
+ }
+ ret.append(arg[p]);
+ }
+ }
+ ret.replace(QLatin1Char('%'), PERCENT_ESCAPE);
+ if (bslashes) {
+ // Ensure that we don't have directly trailing backslashes,
+ // so concatenating with another string won't cause surprises.
+ if (!inquote && !_inquote) {
+ ret.append(dq);
+ }
+ for (; bslashes; bslashes--) {
+ ret.append(QLatin1String("\\\\"));
+ }
+ ret.append(dq);
+ if (inquote && _inquote) {
+ ret.append(dq);
+ }
+ } else if (inquote != _inquote) {
+ ret.append(dq);
+ }
+ return ret;
+}
+
+QString KShell::quoteArg(const QString &arg)
+{
+ if (arg.isEmpty()) {
+ return QStringLiteral("\"\"");
+ }
+
+ // Ensure that we don't have directly trailing backslashes,
+ // so concatenating with another string won't cause surprises.
+ if (arg.endsWith(QLatin1Char('\\'))) {
+ return quoteArgInternal(arg, false);
+ }
+
+ for (int x = arg.length() - 1; x >= 0; --x)
+ if (isSpecialChar(arg[x].unicode())) {
+ return quoteArgInternal(arg, false);
+ }
+
+ // Escape quotes. Preceding backslashes are doubled.
+ // Note that the remaining string is not quoted.
+ QString ret(arg);
+ ret.replace(QRegularExpression(QStringLiteral("(\\\\*)\"")), QStringLiteral("\\1\\1\\^\""));
+ ret.replace(QLatin1Char('%'), PERCENT_ESCAPE);
+ return ret;
+}
--- /dev/null
+/*
+ KUser - represent a user/account
+
+ SPDX-FileCopyrightText: 2002-2003 Tim Jansen <tim@tjansen.de>
+ SPDX-FileCopyrightText: 2003 Oswald Buddenhagen <ossi@kde.org>
+ SPDX-FileCopyrightText: 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#ifndef KUSER_H
+#define KUSER_H
+
+#include <kcoreaddons_export.h>
+
+#include <QSharedDataPointer>
+#include <QStringList>
+#include <QVariant>
+#include <qcontainerfwd.h>
+
+class KUserGroup;
+class QString;
+
+#ifdef Q_OS_WIN
+typedef void *K_UID;
+typedef void *K_GID;
+struct WindowsSIDWrapper;
+#else
+#include <sys/types.h>
+typedef uid_t K_UID;
+typedef gid_t K_GID;
+struct passwd;
+struct group;
+#endif
+
+// The following is to avoid compile errors using msvc, and it is done
+// using a common #define to avoid helpful people accidentally cleaning this
+// not quite pretty thing and breaking it for people on windows.
+// See https://git.reviewboard.kde.org/r/127598/ for details
+#define KCOREADDONS_UINT_MAX (std::numeric_limits<uint>::max)()
+
+/** A platform independent user or group ID.
+ *
+ *
+ * This struct is required since Windows does not have an integer uid_t/gid_t type
+ * but instead uses an opaque binary blob (SID) which must free allocated memory.
+ * On UNIX this is simply a uid_t/gid_t and all operations are inline, so there is
+ * no runtime overhead over using the uid_t/gid_t directly. On Windows this is an implicitly
+ * shared class that frees the underlying SID once no more references remain.
+ *
+ * Unlike KUser/KUserGroup this does not query additional information, it is simply
+ * an abstraction over the native user/group ID type. If more information is necessary, a
+ * KUser or KUserGroup instance can be constructed from this ID
+ *
+ * @internal
+ * @author Alex Richardson <arichardson.kde@gmail.com>
+ */
+template<typename T>
+struct KCOREADDONS_EXPORT KUserOrGroupId {
+ typedef T NativeType;
+
+protected:
+ /** Creates an invalid KUserOrGroupId */
+ KUserOrGroupId();
+ /** Creates a KUserOrGroupId from a native user/group ID. On windows this will not take
+ * ownership over the passed SID, a copy will be created instead.
+ */
+ explicit KUserOrGroupId(NativeType nativeId);
+ /** Copy constructor. This is very fast, objects can be passed by value */
+ KUserOrGroupId(const KUserOrGroupId<T> &other);
+ KUserOrGroupId &operator=(const KUserOrGroupId<T> &other);
+ ~KUserOrGroupId();
+
+public:
+ /** @return true if this object references a valid user/group ID.
+ * @note If this returns true it doesn't necessarily mean that the referenced user/group exists,
+ * it only checks whether this value could be a valid user/group ID.
+ */
+ bool isValid() const;
+ /**
+ * @return A user/group ID that can be used in operating system specific functions
+ * @note On Windows the returned pointer will be freed once the last KUserOrGroupId referencing
+ * this user/group ID is deleted. Make sure that the KUserOrGroupId object remains valid as
+ * long as the native pointer is needed.
+ */
+ NativeType nativeId() const;
+ /** @return A string representation of this user ID, not the name of the user
+ * On UNIX this is a simple integer, e.g. "0" for root. On Windows this is a string
+ * like e.g. "S-1-5-32-544" for the Administrators group
+ */
+ QString toString() const;
+ /** @return whether this KUserOrGroupId is equal to @p other */
+ bool operator==(const KUserOrGroupId &other) const;
+ /** @return whether this KUserOrGroupId is not equal to @p other */
+ bool operator!=(const KUserOrGroupId &other) const;
+
+private:
+#ifdef Q_OS_WIN
+ QExplicitlySharedDataPointer<WindowsSIDWrapper> data;
+#else
+ NativeType id;
+#endif
+};
+
+#ifdef Q_OS_WIN
+template<>
+KUserOrGroupId<void *>::KUserOrGroupId();
+template<>
+KUserOrGroupId<void *>::~KUserOrGroupId();
+template<>
+KUserOrGroupId<void *>::KUserOrGroupId(KUserOrGroupId::NativeType nativeId);
+template<>
+KUserOrGroupId<void *>::KUserOrGroupId(const KUserOrGroupId &other);
+template<>
+KUserOrGroupId<void *> &KUserOrGroupId<void *>::operator=(const KUserOrGroupId &other);
+template<>
+bool KUserOrGroupId<void *>::isValid() const;
+template<>
+KUserOrGroupId<void *>::NativeType KUserOrGroupId<void *>::nativeId() const;
+template<>
+QString KUserOrGroupId<void *>::toString() const;
+template<>
+bool KUserOrGroupId<void *>::operator==(const KUserOrGroupId &other) const;
+template<>
+bool KUserOrGroupId<void *>::operator!=(const KUserOrGroupId &other) const;
+#endif
+
+/** A platform independent user ID.
+ * @see KUserOrGroupId
+ * @since 5.0
+ * @author Alex Richardson <arichardson.kde@gmail.com>
+ */
+struct KCOREADDONS_EXPORT KUserId : public KUserOrGroupId<K_UID> {
+ /** Creates an invalid KUserId */
+ KUserId()
+ {
+ }
+ /** Creates an KUserId from the native user ID type */
+ explicit KUserId(K_UID uid)
+ : KUserOrGroupId(uid)
+ {
+ }
+ KUserId(const KUserId &other)
+ : KUserOrGroupId(other)
+ {
+ }
+ ~KUserId()
+ {
+ }
+ /** @return a KUserId for the user with name @p name, or an invalid KUserId if no
+ * user with this name was found on the system
+ */
+ static KUserId fromName(const QString &name);
+ /** @return a KUserId for the current user. This is like ::getuid() on UNIX. */
+ static KUserId currentUserId();
+ /** @return a KUserId for the current effective user. This is like ::geteuid() on UNIX.
+ * @note Windows does not have setuid binaries, so on Windows this will always be the same
+ * as KUserId::currentUserId()
+ */
+ static KUserId currentEffectiveUserId();
+};
+
+/** A platform independent group ID.
+ * @see KUserOrGroupId
+ * @since 5.0
+ * @author Alex Richardson <arichardson.kde@gmail.com>
+ */
+struct KCOREADDONS_EXPORT KGroupId : public KUserOrGroupId<K_GID> {
+ /** Creates an invalid KGroupId */
+ KGroupId()
+ {
+ }
+ /** Creates an KGroupId from the native group ID type */
+ explicit KGroupId(K_GID gid)
+ : KUserOrGroupId(gid)
+ {
+ }
+ KGroupId(const KGroupId &other)
+ : KUserOrGroupId(other)
+ {
+ }
+ ~KGroupId()
+ {
+ }
+ /** @return A KGroupId for the user with name @p name, or an invalid KGroupId if no
+ * user with this name was found on the system
+ */
+ static KGroupId fromName(const QString &name);
+ /** @return a KGroupId for the current user. This is like ::getgid() on UNIX. */
+ static KGroupId currentGroupId();
+ /** @return a KGroupId for the current effective user. This is like ::getegid() on UNIX.
+ * @note Windows does not have setuid binaries, so on Windows this will always be the same
+ * as KGroupId::currentGroupId()
+ */
+ static KGroupId currentEffectiveGroupId();
+};
+
+#ifndef Q_OS_WIN
+inline uint qHash(const KUserId &id, uint seed = 0)
+{
+ return qHash(id.nativeId(), seed);
+}
+inline uint qHash(const KGroupId &id, uint seed = 0)
+{
+ return qHash(id.nativeId(), seed);
+}
+#else
+// can't be inline on windows, because we would need to include windows.h (which can break code)
+KCOREADDONS_EXPORT uint qHash(const KUserId &id, uint seed = 0);
+KCOREADDONS_EXPORT uint qHash(const KGroupId &id, uint seed = 0);
+#endif
+
+/**
+ * \class KUser kuser.h <KUser>
+ *
+ * @short Represents a user on your system
+ *
+ * This class represents a user on your system. You can either get
+ * information about the current user, or fetch information about
+ * a user on the system. Instances of this class will be explicitly shared,
+ * so copying objects is very cheap and you can safely pass objects by value.
+ *
+ * @author Tim Jansen <tim@tjansen.de>
+ */
+class KCOREADDONS_EXPORT KUser
+{
+public:
+ enum UIDMode {
+ UseEffectiveUID, ///< Use the effective user id.
+ UseRealUserID, ///< Use the real user id.
+ };
+
+ /**
+ * Creates an object that contains information about the current user.
+ * (as returned by getuid(2) or geteuid(2), taking $LOGNAME/$USER into
+ * account).
+ * @param mode if #UseEffectiveUID is passed the effective
+ * user is returned.
+ * If #UseRealUserID is passed the real user will be
+ * returned.
+ * The real UID will be different than the effective UID in setuid
+ * programs; in
+ * such a case use the effective UID for checking permissions, and
+ * the real UID for displaying information about the user.
+ */
+ explicit KUser(UIDMode mode = UseEffectiveUID);
+
+ /**
+ * Creates an object for the user with the given user id.
+ * If the user does not exist isValid() will return false.
+ * @param uid the user id
+ */
+ explicit KUser(K_UID uid);
+
+ /**
+ * Creates an object for the user with the given user id.
+ * If the KUserId object is invalid this one will be, too.
+ * @param uid the user id
+ */
+ explicit KUser(KUserId uid);
+
+ /**
+ * Creates an object that contains information about the user with the given
+ * name. If the user does not exist isValid() will return false.
+ *
+ * @param name the name of the user
+ */
+ explicit KUser(const QString &name);
+
+ /**
+ * Creates an object that contains information about the user with the given
+ * name. If the user does not exist isValid() will return false.
+ *
+ * @param name the name of the user
+ */
+ explicit KUser(const char *name);
+
+#ifndef Q_OS_WIN
+ /**
+ * Creates an object from a passwd structure.
+ * If the pointer is null isValid() will return false.
+ *
+ * @param p the passwd structure to create the user from
+ */
+ explicit KUser(const passwd *p);
+#endif
+
+ /**
+ * Creates an object from another KUser object
+ * @param user the user to create the new object from
+ */
+ KUser(const KUser &user);
+
+ /**
+ * Copies a user
+ * @param user the user to copy
+ * @return this object
+ */
+ KUser &operator=(const KUser &user);
+
+ /**
+ * Two KUser objects are equal if the userId() are identical.
+ * Invalid users never compare equal.
+ */
+ bool operator==(const KUser &user) const;
+
+ /**
+ * Two KUser objects are not equal if userId() are not identical.
+ * Invalid users always compare unequal.
+ */
+ bool operator!=(const KUser &user) const;
+
+ /**
+ * Returns true if the user is valid. A KUser object can be invalid if
+ * you created it with an non-existing uid or name.
+ * @return true if the user is valid
+ */
+ bool isValid() const;
+
+ /** @return the native user id of the user. */
+ KUserId userId() const;
+
+ /** @return the native user id of the user. */
+ KGroupId groupId() const;
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 0)
+ /**
+ * Returns the group id of the user.
+ * @return the id of the group or -1 if user is invalid
+ * @deprecated since 5.0 use KUser::groupId()
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 0, "Use KUser::groupId()")
+ K_GID gid() const
+ {
+ return groupId().nativeId();
+ }
+#endif
+
+ /**
+ * Checks whether the user is the super user (root).
+ * @return true if the user is root
+ */
+ bool isSuperUser() const;
+
+ /**
+ * The login name of the user.
+ * @return the login name of the user or QString() if user is invalid
+ */
+ QString loginName() const;
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 0)
+ /**
+ * The full name of the user.
+ * @return the full name of the user or QString() if user is invalid
+ * @deprecated Since 5.0, use property(KUser::FullName) instead
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 0, "Use KUser::property(KUser::FullName).toString()")
+ QString fullName() const
+ {
+ return property(FullName).toString();
+ }
+ /**
+ * Returns the user id of the user.
+ * @return the id of the user or -1 (UNIX)/ null(Windows) if user is invalid
+ * @deprecated since 5.0 use KUser::userId()
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 0, "Use KUser::userId().nativeId()")
+ K_UID uid() const
+ {
+ return userId().nativeId();
+ }
+#endif
+
+ /**
+ * The path to the user's home directory.
+ * @return the home directory of the user or QString() if the
+ * user is invalid
+ */
+ QString homeDir() const;
+
+ /**
+ * The path to the user's face file.
+ * @return the path to the user's face file or QString() if no
+ * face has been set
+ */
+ QString faceIconPath() const;
+
+ /**
+ * The path to the user's login shell.
+ * @return the login shell of the user or QString() if the
+ * user is invalid
+ */
+ QString shell() const;
+
+ /**
+ * @param maxCount the maximum number of groups to return
+ * @return all groups of the user
+ */
+ QList<KUserGroup> groups(uint maxCount = KCOREADDONS_UINT_MAX) const;
+
+ /**
+ * @param maxCount the maximum number of groups to return
+ * @return all group names of the user
+ */
+ QStringList groupNames(uint maxCount = KCOREADDONS_UINT_MAX) const;
+
+ enum UserProperty {
+ FullName,
+ RoomNumber,
+ WorkPhone,
+ HomePhone,
+ };
+
+ /**
+ * Returns an extended property.
+ *
+ * Under Windows, @p RoomNumber, @p WorkPhone and @p HomePhone are unsupported.
+ *
+ * @return a QVariant with the value of the property or an invalid QVariant,
+ * if the property is not set
+ */
+ QVariant property(UserProperty which) const;
+
+ /**
+ * Destructor.
+ */
+ ~KUser();
+
+ /**
+ * @param maxCount the maximum number of users to return
+ * @return all users of the system.
+ */
+ static QList<KUser> allUsers(uint maxCount = KCOREADDONS_UINT_MAX);
+
+ /**
+ * @param maxCount the maximum number of users to return
+ * @return all user names of the system.
+ */
+ static QStringList allUserNames(uint maxCount = KCOREADDONS_UINT_MAX);
+
+private:
+ QExplicitlySharedDataPointer<class KUserPrivate> d;
+};
+
+/**
+ * \class KUserGroup kuser.h <KUserGroup>
+ *
+ * @short Represents a group on your system
+ *
+ * This class represents a group on your system. You can either get
+ * information about the group of the current user, of fetch information about
+ * a group on the system. Instances of this class will be explicitly shared,
+ * so copying objects is very cheap and you can safely pass objects by value.
+ *
+ * @author Jan Schaefer <j_schaef@informatik.uni-kl.de>
+ */
+class KCOREADDONS_EXPORT KUserGroup
+{
+public:
+ /**
+ * Create an object from a group name.
+ * If the group does not exist, isValid() will return false.
+ * @param name the name of the group
+ */
+ explicit KUserGroup(const QString &name);
+
+ /**
+ * Create an object from a group name.
+ * If the group does not exist, isValid() will return false.
+ * @param name the name of the group
+ */
+ explicit KUserGroup(const char *name);
+
+ /**
+ * Creates an object for the group with the given group id.
+ * If the KGroupId object is invalid this one will be, too.
+ * @param gid the group id
+ */
+ explicit KUserGroup(KGroupId gid);
+
+ /**
+ * Create an object from the group of the current user.
+ * @param mode if #KUser::UseEffectiveUID is passed the effective user
+ * will be used. If #KUser::UseRealUserID is passed the real user
+ * will be used.
+ * The real UID will be different than the effective UID in setuid
+ * programs; in such a case use the effective UID for checking
+ * permissions, and the real UID for displaying information about
+ * the group associated with the user.
+ */
+ explicit KUserGroup(KUser::UIDMode mode = KUser::UseEffectiveUID);
+
+ /**
+ * Create an object from a group id.
+ * If the group does not exist, isValid() will return false.
+ * @param gid the group id
+ */
+ explicit KUserGroup(K_GID gid);
+
+#ifndef Q_OS_WIN
+ /**
+ * Creates an object from a group structure.
+ * If the pointer is null, isValid() will return false.
+ * @param g the group structure to create the group from.
+ */
+ explicit KUserGroup(const group *g);
+#endif
+
+ /**
+ * Creates a new KUserGroup instance from another KUserGroup object
+ * @param group the KUserGroup to copy
+ */
+ KUserGroup(const KUserGroup &group);
+
+ /**
+ * Copies a group
+ * @param group the group that should be copied
+ * @return this group
+ */
+ KUserGroup &operator=(const KUserGroup &group);
+
+ /**
+ * Two KUserGroup objects are equal if their gid()s are identical.
+ * Invalid groups never compare equal.
+ * @return true if the groups are identical
+ */
+ bool operator==(const KUserGroup &group) const;
+
+ /**
+ * Two KUserGroup objects are not equal if their gid()s are not identical.
+ * Invalid groups always compare unequal.
+ * @return true if the groups are not identical
+ */
+ bool operator!=(const KUserGroup &group) const;
+
+ /**
+ * Returns whether the group is valid.
+ * A KUserGroup object can be invalid if it is
+ * created with a non-existing gid or name.
+ * @return true if the group is valid
+ */
+ bool isValid() const;
+
+#if KCOREADDONS_ENABLE_DEPRECATED_SINCE(5, 0)
+ /**
+ * Returns the group id of the group.
+ * @return the group id of the group or -1 if the group is invalid
+ * @deprecated since 5.0 use KUserGroup::groupId()
+ */
+ KCOREADDONS_DEPRECATED_VERSION(5, 0, "Use KUserGroup::groupId().nativeId()")
+ K_GID gid() const
+ {
+ return groupId().nativeId();
+ }
+#endif
+
+ /** @return the native group id of the user. */
+ KGroupId groupId() const;
+
+ /**
+ * The name of the group.
+ * @return the name of the group
+ */
+ QString name() const;
+
+ /**
+ * @param maxCount the maximum number of users to return
+ * @return a list of all users of the group
+ */
+ QList<KUser> users(uint maxCount = KCOREADDONS_UINT_MAX) const;
+
+ /**
+ * @param maxCount the maximum number of groups to return
+ * @return a list of all user login names of the group
+ */
+ QStringList userNames(uint maxCount = KCOREADDONS_UINT_MAX) const;
+
+ /**
+ * Destructor.
+ */
+ ~KUserGroup();
+
+ /**
+ * @param maxCount the maximum number of groups to return
+ * @return a list of all groups on this system
+ */
+ static QList<KUserGroup> allGroups(uint maxCount = KCOREADDONS_UINT_MAX);
+
+ /**
+ * @param maxCount the maximum number of groups to return
+ * @return a list of all group names on this system
+ */
+ static QStringList allGroupNames(uint maxCount = KCOREADDONS_UINT_MAX);
+
+private:
+ QSharedDataPointer<class KUserGroupPrivate> d;
+};
+
+#if !defined(Q_OS_WIN)
+// inline UNIX implementation of KUserOrGroupId
+template<typename T>
+inline bool KUserOrGroupId<T>::isValid() const
+{
+ return id != NativeType(-1);
+}
+template<typename T>
+inline bool KUserOrGroupId<T>::operator==(const KUserOrGroupId<T> &other) const
+{
+ return id == other.id;
+}
+template<typename T>
+inline bool KUserOrGroupId<T>::operator!=(const KUserOrGroupId<T> &other) const
+{
+ return id != other.id;
+}
+template<typename T>
+inline typename KUserOrGroupId<T>::NativeType KUserOrGroupId<T>::nativeId() const
+{
+ return id;
+}
+template<typename T>
+inline QString KUserOrGroupId<T>::toString() const
+{
+ return QString::number(id);
+}
+template<typename T>
+inline KUserOrGroupId<T>::KUserOrGroupId()
+ : id(-1)
+{
+}
+template<typename T>
+inline KUserOrGroupId<T>::KUserOrGroupId(KUserOrGroupId<T>::NativeType nativeId)
+ : id(nativeId)
+{
+}
+template<typename T>
+inline KUserOrGroupId<T>::KUserOrGroupId(const KUserOrGroupId<T> &other)
+ : id(other.id)
+{
+}
+template<typename T>
+inline KUserOrGroupId<T> &KUserOrGroupId<T>::operator=(const KUserOrGroupId<T> &other)
+{
+ id = other.id;
+ return *this;
+}
+template<typename T>
+inline KUserOrGroupId<T>::~KUserOrGroupId()
+{
+}
+#endif // !defined(Q_OS_WIN)
+
+inline bool KUser::operator!=(const KUser &other) const
+{
+ return !operator==(other);
+}
+
+inline bool KUserGroup::operator!=(const KUserGroup &other) const
+{
+ return !operator==(other);
+}
+
+#endif
--- /dev/null
+/*
+ KUser - represent a user/account
+
+ SPDX-FileCopyrightText: 2002 Tim Jansen <tim@tjansen.de>
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "config-accountsservice.h"
+#include "config-getgrouplist.h"
+#include "kcoreaddons_debug.h"
+#include "kuser.h"
+
+#include <QFileInfo>
+
+#include <cerrno>
+#include <grp.h>
+#include <pwd.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <algorithm> // std::find
+#include <functional> // std::function
+
+#if defined(__BIONIC__) && __ANDROID_API__ < 26
+static inline struct passwd *getpwent()
+{
+ return nullptr;
+}
+inline void setpwent()
+{
+}
+static inline void setgrent()
+{
+}
+static inline struct group *getgrent()
+{
+ return nullptr;
+}
+inline void endpwent()
+{
+}
+static inline void endgrent()
+{
+}
+#endif
+
+class KUserPrivate : public QSharedData
+{
+public:
+ uid_t uid;
+ gid_t gid;
+ QString loginName;
+ QString homeDir, shell;
+ QMap<KUser::UserProperty, QVariant> properties;
+
+ KUserPrivate()
+ : uid(uid_t(-1))
+ , gid(gid_t(-1))
+ {
+ }
+ KUserPrivate(const char *name)
+ : uid(uid_t(-1))
+ , gid(gid_t(-1))
+ {
+ fillPasswd(name ? ::getpwnam(name) : nullptr);
+ }
+ KUserPrivate(const passwd *p)
+ : uid(uid_t(-1))
+ , gid(gid_t(-1))
+ {
+ fillPasswd(p);
+ }
+
+ void fillPasswd(const passwd *p)
+ {
+ if (p) {
+#ifndef __BIONIC__
+ QString gecos = QString::fromLocal8Bit(p->pw_gecos);
+#else
+ QString gecos = QString();
+#endif
+ QStringList gecosList = gecos.split(QLatin1Char(','));
+ // fill up the list, should be at least 4 entries
+ while (gecosList.size() < 4) {
+ gecosList << QString();
+ }
+
+ uid = p->pw_uid;
+ gid = p->pw_gid;
+ loginName = QString::fromLocal8Bit(p->pw_name);
+ properties[KUser::FullName] = QVariant(gecosList[0]);
+ properties[KUser::RoomNumber] = QVariant(gecosList[1]);
+ properties[KUser::WorkPhone] = QVariant(gecosList[2]);
+ properties[KUser::HomePhone] = QVariant(gecosList[3]);
+ if (uid == ::getuid() && uid == ::geteuid()) {
+ homeDir = QFile::decodeName(qgetenv("HOME"));
+ }
+ if (homeDir.isEmpty()) {
+ homeDir = QFile::decodeName(p->pw_dir);
+ }
+ shell = QString::fromLocal8Bit(p->pw_shell);
+ }
+ }
+};
+
+KUser::KUser(UIDMode mode)
+{
+ uid_t _uid = ::getuid(), _euid;
+ if (mode == UseEffectiveUID && (_euid = ::geteuid()) != _uid) {
+ d = new KUserPrivate(::getpwuid(_euid));
+ } else {
+ d = new KUserPrivate(qgetenv("LOGNAME").constData());
+ if (d->uid != _uid) {
+ d = new KUserPrivate(qgetenv("USER").constData());
+ if (d->uid != _uid) {
+ d = new KUserPrivate(::getpwuid(_uid));
+ }
+ }
+ }
+}
+
+KUser::KUser(K_UID _uid)
+ : d(new KUserPrivate(::getpwuid(_uid)))
+{
+}
+
+KUser::KUser(KUserId _uid)
+ : d(new KUserPrivate(::getpwuid(_uid.nativeId())))
+{
+}
+
+KUser::KUser(const QString &name)
+ : d(new KUserPrivate(name.toLocal8Bit().data()))
+{
+}
+
+KUser::KUser(const char *name)
+ : d(new KUserPrivate(name))
+{
+}
+
+KUser::KUser(const passwd *p)
+ : d(new KUserPrivate(p))
+{
+}
+
+KUser::KUser(const KUser &user)
+ : d(user.d)
+{
+}
+
+KUser &KUser::operator=(const KUser &user)
+{
+ d = user.d;
+ return *this;
+}
+
+bool KUser::operator==(const KUser &user) const
+{
+ return isValid() && (d->uid == user.d->uid);
+}
+
+bool KUser::isValid() const
+{
+ return d->uid != uid_t(-1);
+}
+
+KUserId KUser::userId() const
+{
+ return KUserId(d->uid);
+}
+
+KGroupId KUser::groupId() const
+{
+ return KGroupId(d->gid);
+}
+
+bool KUser::isSuperUser() const
+{
+ return d->uid == 0;
+}
+
+QString KUser::loginName() const
+{
+ return d->loginName;
+}
+
+QString KUser::homeDir() const
+{
+ return d->homeDir;
+}
+
+QString KUser::faceIconPath() const
+{
+ QString pathToFaceIcon;
+ if (!d->loginName.isEmpty()) {
+ pathToFaceIcon = QStringLiteral(ACCOUNTS_SERVICE_ICON_DIR) + QLatin1Char('/') + d->loginName;
+ }
+
+ if (QFile::exists(pathToFaceIcon)) {
+ return pathToFaceIcon;
+ }
+
+ pathToFaceIcon = homeDir() + QLatin1Char('/') + QLatin1String(".face.icon");
+
+ if (QFileInfo(pathToFaceIcon).isReadable()) {
+ return pathToFaceIcon;
+ }
+
+ return QString();
+}
+
+QString KUser::shell() const
+{
+ return d->shell;
+}
+
+template<class Func>
+static void listGroupsForUser(const char *name, gid_t gid, uint maxCount, Func handleNextGroup)
+{
+ if (Q_UNLIKELY(maxCount == 0)) {
+ return;
+ }
+ uint found = 0;
+#if HAVE_GETGROUPLIST
+ QVarLengthArray<gid_t, 100> gid_buffer;
+ gid_buffer.resize(100);
+ int numGroups = gid_buffer.size();
+ int result = getgrouplist(name, gid, gid_buffer.data(), &numGroups);
+ if (result < 0 && uint(numGroups) < maxCount) {
+ // getgrouplist returns -1 if the buffer was too small to store all entries, the required size is in numGroups
+ qCDebug(KCOREADDONS_DEBUG, "Buffer was too small: %d, need %d", gid_buffer.size(), numGroups);
+ gid_buffer.resize(numGroups);
+ numGroups = gid_buffer.size();
+ getgrouplist(name, gid, gid_buffer.data(), &numGroups);
+ }
+ for (int i = 0; i < numGroups && found < maxCount; ++i) {
+ struct group *g = getgrgid(gid_buffer[i]);
+ // should never be null, but better be safe than crash
+ if (g) {
+ found++;
+ handleNextGroup(g);
+ }
+ }
+#else
+ // fall back to getgrent() and reading gr->gr_mem
+ // This is slower than getgrouplist, but works as well
+ // add the current gid, this is often not part of g->gr_mem (e.g. build.kde.org or my openSuSE 13.1 system)
+ struct group *g = getgrgid(gid);
+ if (g) {
+ handleNextGroup(g);
+ found++;
+ if (found >= maxCount) {
+ return;
+ }
+ }
+
+ static const auto groupContainsUser = [](struct group *g, const char *name) -> bool {
+ for (char **user = g->gr_mem; *user; user++) {
+ if (strcmp(name, *user) == 0) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ setgrent();
+ while ((g = getgrent())) {
+ // don't add the current gid again
+ if (g->gr_gid != gid && groupContainsUser(g, name)) {
+ handleNextGroup(g);
+ found++;
+ if (found >= maxCount) {
+ break;
+ }
+ }
+ }
+ endgrent();
+#endif
+}
+
+QList<KUserGroup> KUser::groups(uint maxCount) const
+{
+ QList<KUserGroup> result;
+ listGroupsForUser(d->loginName.toLocal8Bit().constData(), d->gid, maxCount, [&](const group *g) {
+ result.append(KUserGroup(g));
+ });
+ return result;
+}
+
+QStringList KUser::groupNames(uint maxCount) const
+{
+ QStringList result;
+ listGroupsForUser(d->loginName.toLocal8Bit().constData(), d->gid, maxCount, [&](const group *g) {
+ result.append(QString::fromLocal8Bit(g->gr_name));
+ });
+ return result;
+}
+
+QVariant KUser::property(UserProperty which) const
+{
+ return d->properties.value(which);
+}
+
+QList<KUser> KUser::allUsers(uint maxCount)
+{
+ QList<KUser> result;
+
+ passwd *p;
+ setpwent();
+
+ for (uint i = 0; i < maxCount && (p = getpwent()); ++i) {
+ result.append(KUser(p));
+ }
+
+ endpwent();
+
+ return result;
+}
+
+QStringList KUser::allUserNames(uint maxCount)
+{
+ QStringList result;
+
+ passwd *p;
+ setpwent();
+
+ for (uint i = 0; i < maxCount && (p = getpwent()); ++i) {
+ result.append(QString::fromLocal8Bit(p->pw_name));
+ }
+
+ endpwent();
+ return result;
+}
+
+KUser::~KUser()
+{
+}
+
+class KUserGroupPrivate : public QSharedData
+{
+public:
+ gid_t gid;
+ QString name;
+
+ KUserGroupPrivate()
+ : gid(gid_t(-1))
+ {
+ }
+ KUserGroupPrivate(const char *_name)
+ : gid(gid_t(-1))
+ {
+ fillGroup(_name ? ::getgrnam(_name) : nullptr);
+ }
+ KUserGroupPrivate(const ::group *p)
+ : gid(gid_t(-1))
+ {
+ fillGroup(p);
+ }
+
+ void fillGroup(const ::group *p)
+ {
+ if (p) {
+ gid = p->gr_gid;
+ name = QString::fromLocal8Bit(p->gr_name);
+ }
+ }
+};
+
+KUserGroup::KUserGroup(KUser::UIDMode mode)
+{
+ d = new KUserGroupPrivate(getgrgid(KUser(mode).groupId().nativeId()));
+}
+
+KUserGroup::KUserGroup(K_GID _gid)
+ : d(new KUserGroupPrivate(getgrgid(_gid)))
+{
+}
+
+KUserGroup::KUserGroup(KGroupId _gid)
+ : d(new KUserGroupPrivate(getgrgid(_gid.nativeId())))
+{
+}
+
+KUserGroup::KUserGroup(const QString &_name)
+ : d(new KUserGroupPrivate(_name.toLocal8Bit().data()))
+{
+}
+
+KUserGroup::KUserGroup(const char *_name)
+ : d(new KUserGroupPrivate(_name))
+{
+}
+
+KUserGroup::KUserGroup(const ::group *g)
+ : d(new KUserGroupPrivate(g))
+{
+}
+
+KUserGroup::KUserGroup(const KUserGroup &group)
+ : d(group.d)
+{
+}
+
+KUserGroup &KUserGroup::operator=(const KUserGroup &group)
+{
+ d = group.d;
+ return *this;
+}
+
+bool KUserGroup::operator==(const KUserGroup &group) const
+{
+ return isValid() && (d->gid == group.d->gid);
+}
+
+bool KUserGroup::isValid() const
+{
+ return d->gid != gid_t(-1);
+}
+
+KGroupId KUserGroup::groupId() const
+{
+ return KGroupId(d->gid);
+}
+
+QString KUserGroup::name() const
+{
+ return d->name;
+}
+
+static void listGroupMembers(gid_t gid, uint maxCount, std::function<void(passwd *)> handleNextGroupUser)
+{
+ if (maxCount == 0) {
+ return;
+ }
+ struct group *g = getgrgid(gid);
+ if (!g) {
+ return;
+ }
+ uint found = 0;
+ QVarLengthArray<uid_t> addedUsers;
+ struct passwd *p = nullptr;
+ for (char **user = g->gr_mem; *user; user++) {
+ if ((p = getpwnam(*user))) {
+ addedUsers.append(p->pw_uid);
+ handleNextGroupUser(p);
+ found++;
+ if (found >= maxCount) {
+ break;
+ }
+ }
+ }
+
+ // gr_mem doesn't contain users where the primary group == gid -> we have to iterate over all users
+ setpwent();
+ while ((p = getpwent()) && found < maxCount) {
+ if (p->pw_gid != gid) {
+ continue; // only need primary gid since otherwise gr_mem already contains this user
+ }
+ // make sure we don't list a user twice
+ if (std::find(addedUsers.cbegin(), addedUsers.cend(), p->pw_uid) == addedUsers.cend()) {
+ handleNextGroupUser(p);
+ found++;
+ }
+ }
+ endpwent();
+}
+
+QList<KUser> KUserGroup::users(uint maxCount) const
+{
+ QList<KUser> result;
+ listGroupMembers(d->gid, maxCount, [&](const passwd *p) {
+ result.append(KUser(p));
+ });
+ return result;
+}
+
+QStringList KUserGroup::userNames(uint maxCount) const
+{
+ QStringList result;
+ listGroupMembers(d->gid, maxCount, [&](const passwd *p) {
+ result.append(QString::fromLocal8Bit(p->pw_name));
+ });
+ return result;
+}
+
+QList<KUserGroup> KUserGroup::allGroups(uint maxCount)
+{
+ QList<KUserGroup> result;
+
+ ::group *g;
+ setgrent();
+
+ for (uint i = 0; i < maxCount && (g = getgrent()); ++i) {
+ result.append(KUserGroup(g));
+ }
+
+ endgrent();
+
+ return result;
+}
+
+QStringList KUserGroup::allGroupNames(uint maxCount)
+{
+ QStringList result;
+
+ ::group *g;
+ setgrent();
+
+ for (uint i = 0; i < maxCount && (g = getgrent()); ++i) {
+ result.append(QString::fromLocal8Bit(g->gr_name));
+ }
+
+ endgrent();
+
+ return result;
+}
+
+KUserGroup::~KUserGroup()
+{
+}
+
+KUserId KUserId::fromName(const QString &name)
+{
+ if (name.isEmpty()) {
+ return KUserId();
+ }
+ QByteArray name8Bit = name.toLocal8Bit();
+ struct passwd *p = ::getpwnam(name8Bit.constData());
+ if (!p) {
+ qCWarning(KCOREADDONS_DEBUG, "Failed to lookup user %s: %s", name8Bit.constData(), strerror(errno));
+ return KUserId();
+ }
+ return KUserId(p->pw_uid);
+}
+
+KGroupId KGroupId::fromName(const QString &name)
+{
+ if (name.isEmpty()) {
+ return KGroupId();
+ }
+ QByteArray name8Bit = name.toLocal8Bit();
+ struct group *g = ::getgrnam(name8Bit.constData());
+ if (!g) {
+ qCWarning(KCOREADDONS_DEBUG, "Failed to lookup group %s: %s", name8Bit.constData(), strerror(errno));
+ return KGroupId();
+ }
+ return KGroupId(g->gr_gid);
+}
+
+KUserId KUserId::currentUserId()
+{
+ return KUserId(getuid());
+}
+
+KUserId KUserId::currentEffectiveUserId()
+{
+ return KUserId(geteuid());
+}
+
+KGroupId KGroupId::currentGroupId()
+{
+ return KGroupId(getgid());
+}
+
+KGroupId KGroupId::currentEffectiveGroupId()
+{
+ return KGroupId(getegid());
+}
--- /dev/null
+/*
+ KUser - represent a user/account (Windows)
+
+ SPDX-FileCopyrightText: 2007 Bernhard Loos <nhuh.put@web.de>
+ SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include "kuser.h"
+
+#include "kcoreaddons_debug.h"
+#include <QDir>
+#include <QStandardPaths>
+
+#include <memory> // unique_ptr
+#include <type_traits>
+
+#include <qt_windows.h> // Must be included before lm.h
+
+#include <lm.h> //Net*
+
+#include <sddl.h> //ConvertSidToStringSidW
+#include <shlobj.h>
+#include <userenv.h> //GetProfilesDirectoryW
+
+// this can't be a lambda due to a MSVC2012 bug
+// (works fine in 2010 and 2013)
+struct netApiBufferDeleter {
+ void operator()(void *buffer)
+ {
+ if (buffer) {
+ NetApiBufferFree(buffer);
+ }
+ }
+};
+
+template<typename T>
+class ScopedNetApiBuffer : public std::unique_ptr<T, netApiBufferDeleter>
+{
+public:
+ // explicit scope resolution operator needed in ::netApiBufferDeleter
+ // because of *another* MSVC bug :(
+ inline explicit ScopedNetApiBuffer(T *data)
+ : std::unique_ptr<T, ::netApiBufferDeleter>(data, ::netApiBufferDeleter())
+ {
+ }
+};
+
+const auto handleCloser = [](HANDLE h) {
+ if (h != INVALID_HANDLE_VALUE) {
+ CloseHandle(h);
+ }
+};
+typedef std::unique_ptr<std::remove_pointer<HANDLE>::type, decltype(handleCloser)> ScopedHANDLE;
+
+/** Make sure the NetApi functions are called with the correct level argument (for template functions)
+ * This argument can be retrieved by using NetApiTypeInfo<T>::level. In order to do so the type must be
+ * registered by writing e.g. NETAPI_TYPE_INFO(GROUP_INFO, 0) for GROUP_INFO_0
+ */
+template<typename T>
+struct NetApiTypeInfo {
+};
+#define NETAPI_TYPE_INFO(prefix, n) \
+ template<> \
+ struct NetApiTypeInfo<prefix##_##n> { \
+ enum { level = n }; \
+ };
+NETAPI_TYPE_INFO(GROUP_INFO, 0)
+NETAPI_TYPE_INFO(GROUP_INFO, 3)
+NETAPI_TYPE_INFO(USER_INFO, 0)
+NETAPI_TYPE_INFO(USER_INFO, 4)
+NETAPI_TYPE_INFO(USER_INFO, 11)
+NETAPI_TYPE_INFO(GROUP_USERS_INFO, 0)
+
+// T must be a USER_INFO_* structure
+template<typename T>
+ScopedNetApiBuffer<T> getUserInfo(LPCWSTR server, const QString &userName, NET_API_STATUS *errCode)
+{
+ LPBYTE userInfoTmp = nullptr;
+ // if level = 11 a USER_INFO_11 structure gets filled in and allocated by NetUserGetInfo(), etc.
+ NET_API_STATUS status = NetUserGetInfo(server, (LPCWSTR)userName.utf16(), NetApiTypeInfo<T>::level, &userInfoTmp);
+ if (status != NERR_Success) {
+ userInfoTmp = nullptr;
+ }
+ if (errCode) {
+ *errCode = status;
+ }
+ return ScopedNetApiBuffer<T>((T *)userInfoTmp);
+}
+
+// enumeration functions
+/** simplify calling the Net*Enum functions to prevent copy and paste for allUsers(), allUserNames(), allGroups(), allGroupNames()
+ * @tparam T The type that is enumerated (e.g. USER_INFO_11) Must be registered using NETAPI_TYPE_INFO.
+ * @param callback Callback for each listed object. Signature: void(const T&)
+ * @param enumFunc This function enumerates the data using a Net* function.
+ * It will be called in a loop as long as it returns ERROR_MORE_DATA.
+ *
+ */
+template<class T, class Callback, class EnumFunction>
+static void netApiEnumerate(uint maxCount, Callback callback, EnumFunction enumFunc)
+{
+ NET_API_STATUS nStatus = NERR_Success;
+ DWORD_PTR resumeHandle = 0;
+ uint total = 0;
+ int level = NetApiTypeInfo<T>::level;
+ do {
+ LPBYTE buffer = nullptr;
+ DWORD entriesRead = 0;
+ DWORD totalEntries = 0;
+ nStatus = enumFunc(level, &buffer, &entriesRead, &totalEntries, &resumeHandle);
+ // qDebug("Net*Enum(level = %d) returned %d entries, total was (%d), status = %d, resume handle = %llx",
+ // level, entriesRead, totalEntries, nStatus, resumeHandle);
+
+ // buffer must always be freed, even if Net*Enum fails
+ ScopedNetApiBuffer<T> groupInfo((T *)buffer);
+ if (nStatus == NERR_Success || nStatus == ERROR_MORE_DATA) {
+ for (DWORD i = 0; total < maxCount && i < entriesRead; i++, total++) {
+ callback(groupInfo.get()[i]);
+ }
+ } else {
+ qCWarning(KCOREADDONS_DEBUG, "NetApi enumerate function failed: status = %d", (int)nStatus);
+ }
+ } while (nStatus == ERROR_MORE_DATA);
+}
+
+template<class T, class Callback>
+void enumerateAllUsers(uint maxCount, Callback callback)
+{
+ netApiEnumerate<T>(maxCount, callback, [](int level, LPBYTE *buffer, DWORD *count, DWORD *total, PDWORD_PTR resumeHandle) {
+ // pass 0 as filter -> get all users
+ // Why does this function take a DWORD* as resume handle and NetUserEnum/NetGroupGetUsers a UINT64*
+ // Great API design by Microsoft...
+ // casting the uint64* to uint32* is fine, it just writes to the first 32 bits
+ return NetUserEnum(nullptr, level, 0, buffer, MAX_PREFERRED_LENGTH, count, total, (PDWORD)resumeHandle);
+ });
+}
+
+template<typename T, class Callback>
+void enumerateAllGroups(uint maxCount, Callback callback)
+{
+ netApiEnumerate<T>(maxCount, callback, [](int level, LPBYTE *buffer, DWORD *count, DWORD *total, PDWORD_PTR resumeHandle) {
+ return NetGroupEnum(nullptr, level, buffer, MAX_PREFERRED_LENGTH, count, total, resumeHandle);
+ });
+}
+
+template<typename T, class Callback>
+void enumerateGroupsForUser(uint maxCount, const QString &name, Callback callback)
+{
+ LPCWSTR nameStr = (LPCWSTR)name.utf16();
+ netApiEnumerate<T>(maxCount, callback, [&](int level, LPBYTE *buffer, DWORD *count, DWORD *total, PDWORD_PTR resumeHandle) -> NET_API_STATUS {
+ Q_UNUSED(resumeHandle);
+ NET_API_STATUS ret = NetUserGetGroups(nullptr, nameStr, level, buffer, MAX_PREFERRED_LENGTH, count, total);
+ // if we return ERROR_MORE_DATA here it will result in an endless loop
+ if (ret == ERROR_MORE_DATA) {
+ qCWarning(KCOREADDONS_DEBUG) << "NetUserGetGroups for user" << name << "returned ERROR_MORE_DATA. This should not happen!";
+ ret = NERR_Success;
+ }
+ return ret;
+ });
+}
+
+template<typename T, class Callback>
+void enumerateUsersForGroup(const QString &name, uint maxCount, Callback callback)
+{
+ LPCWSTR nameStr = (LPCWSTR)name.utf16();
+ netApiEnumerate<T>(maxCount, callback, [nameStr](int level, LPBYTE *buffer, DWORD *count, DWORD *total, PDWORD_PTR resumeHandle) {
+ return NetGroupGetUsers(nullptr, nameStr, level, buffer, MAX_PREFERRED_LENGTH, count, total, resumeHandle);
+ });
+}
+
+class KUserPrivate : public QSharedData
+{
+ typedef QExplicitlySharedDataPointer<KUserPrivate> Ptr;
+ KUserPrivate()
+ : isAdmin(false)
+ {
+ }
+ // takes ownership over userInfo_
+ KUserPrivate(KUserId uid, KGroupId gid, const QString &loginName, const QString &fullName, const QString &domain, const QString &homeDir, bool isAdmin)
+ : uid(uid)
+ , gid(gid)
+ , loginName(loginName)
+ , fullName(fullName)
+ , domain(domain)
+ , homeDir(homeDir)
+ , isAdmin(isAdmin)
+ {
+ Q_ASSERT(uid.isValid());
+ }
+ static QString guessHomeDir(const QString &username, KUserId uid)
+ {
+ // usri11_home_dir/usri4_home_dir is often empty
+ // check whether it is the homedir for the current user and if not then fall back to "<user profiles dir>\<user name>"
+ if (uid == KUserId::currentUserId()) {
+ return QDir::homePath();
+ }
+ QString homeDir;
+ WCHAR profileDirPath[MAX_PATH];
+ DWORD bufSize = MAX_PATH;
+ BOOL result = GetProfilesDirectoryW(profileDirPath, &bufSize);
+ if (result) {
+ // This might not be correct: e.g. with local user and domain user with same
+ // In that case it could be C:\Users\Foo (local user) vs C:\Users\Foo.DOMAIN (domain user)
+ // However it is still much better than the previous code which just returned the current users home dir
+ homeDir = QString::fromWCharArray(profileDirPath) + QLatin1Char('\\') + username;
+ }
+ return homeDir;
+ }
+
+public:
+ static Ptr sharedNull;
+ KUserId uid;
+ KGroupId gid;
+ QString loginName;
+ QString fullName;
+ QString domain;
+ QString homeDir;
+ bool isAdmin;
+
+ /** Creates a user info from a SID (never returns null) */
+ static Ptr create(KUserId uid)
+ {
+ if (!uid.isValid()) {
+ return sharedNull;
+ }
+ // now find the fully qualified name for the user
+ DWORD nameBufferLen = UNLEN + 1;
+ WCHAR nameBuffer[UNLEN + 1];
+ DWORD domainBufferLen = UNLEN + 1;
+ WCHAR domainBuffer[UNLEN + 1];
+ SID_NAME_USE use;
+ if (!LookupAccountSidW(nullptr, uid.nativeId(), nameBuffer, &nameBufferLen, domainBuffer, &domainBufferLen, &use)) {
+ qCWarning(KCOREADDONS_DEBUG) << "Could not lookup user " << uid.toString() << "error =" << GetLastError();
+ return sharedNull;
+ }
+ QString loginName = QString::fromWCharArray(nameBuffer);
+ QString domainName = QString::fromWCharArray(domainBuffer);
+ if (use != SidTypeUser && use != SidTypeDeletedAccount) {
+ qCWarning(KCOREADDONS_DEBUG).nospace() << "SID for " << domainName << "\\" << loginName << " (" << uid.toString() << ") is not of type user ("
+ << SidTypeUser << " or " << SidTypeDeletedAccount << "). Got type " << use << " instead.";
+ return sharedNull;
+ }
+ // now get the server name to query (could be null for local machine)
+ LPWSTR servernameTmp = nullptr;
+ NET_API_STATUS status = NetGetAnyDCName(nullptr, 0, (LPBYTE *)&servernameTmp);
+ if (status != NERR_Success) {
+ // this always fails on my desktop system, don't spam the output
+ // qDebug("NetGetAnyDCName failed with error %d", status);
+ }
+ ScopedNetApiBuffer<WCHAR> servername(servernameTmp);
+
+ QString fullName;
+ QString homeDir;
+ KGroupId group;
+ bool isAdmin = false;
+ // must NOT pass the qualified name ("domain\user") here or lookup fails -> just the name
+ // try USER_INFO_4 first, MSDN says it is valid only on servers (whatever that means), it works on my desktop system
+ // If it fails fall back to USER_INFO11, which has all the needed information except primary group
+ if (auto userInfo4 = getUserInfo<USER_INFO_4>(servername.get(), loginName, &status)) {
+ Q_ASSERT(KUserId(userInfo4->usri4_user_sid) == uid); // if this is not the same we have a logic error
+ fullName = QString::fromWCharArray(userInfo4->usri4_full_name);
+ homeDir = QString::fromWCharArray(userInfo4->usri4_home_dir);
+ isAdmin = userInfo4->usri4_priv == USER_PRIV_ADMIN;
+ // now determine the primary group:
+ const DWORD primaryGroup = userInfo4->usri4_primary_group_id;
+ // primary group is a relative identifier, i.e. in order to get the SID for that group
+ // we have to take the user SID and replace the last subauthority value with the relative identifier
+ group = KGroupId(uid.nativeId()); // constructor does not check whether the sid refers to a group
+ Q_ASSERT(group.isValid());
+ UCHAR numSubauthorities = *GetSidSubAuthorityCount(group.nativeId());
+ PDWORD lastSubAutority = GetSidSubAuthority(group.nativeId(), numSubauthorities - 1);
+ *lastSubAutority = primaryGroup;
+ } else if (auto userInfo11 = getUserInfo<USER_INFO_11>(servername.get(), loginName, &status)) {
+ fullName = QString::fromWCharArray(userInfo11->usri11_full_name);
+ homeDir = QString::fromWCharArray(userInfo11->usri11_home_dir);
+ isAdmin = userInfo11->usri11_priv == USER_PRIV_ADMIN;
+ } else {
+ qCWarning(KCOREADDONS_DEBUG).nospace() << "Could not get information for user " << domainName << "\\" << loginName << ": error code = " << status;
+ return sharedNull;
+ }
+ if (homeDir.isEmpty()) {
+ homeDir = guessHomeDir(loginName, uid);
+ }
+ // if we couldn't find a primary group just take the first group found for this user
+ if (!group.isValid()) {
+ enumerateGroupsForUser<GROUP_USERS_INFO_0>(1, loginName, [&](const GROUP_USERS_INFO_0 &info) {
+ group = KGroupId::fromName(QString::fromWCharArray(info.grui0_name));
+ });
+ }
+ return Ptr(new KUserPrivate(uid, group, loginName, fullName, domainName, homeDir, isAdmin));
+ }
+};
+
+KUserPrivate::Ptr KUserPrivate::sharedNull(new KUserPrivate());
+
+KUser::KUser(UIDMode mode)
+{
+ if (mode == UseEffectiveUID) {
+ d = KUserPrivate::create(KUserId::currentEffectiveUserId());
+ } else if (mode == UseRealUserID) {
+ d = KUserPrivate::create(KUserId::currentUserId());
+ } else {
+ d = KUserPrivate::sharedNull;
+ }
+}
+
+KUser::KUser(K_UID uid)
+ : d(KUserPrivate::create(KUserId(uid)))
+{
+}
+
+KUser::KUser(KUserId uid)
+ : d(KUserPrivate::create(uid))
+{
+}
+
+KUser::KUser(const QString &name)
+ : d(KUserPrivate::create(KUserId::fromName(name)))
+{
+}
+
+KUser::KUser(const char *name)
+ : d(KUserPrivate::create(KUserId::fromName(QString::fromLocal8Bit(name))))
+{
+}
+
+KUser::KUser(const KUser &user)
+ : d(user.d)
+{
+}
+
+KUser &KUser::operator=(const KUser &user)
+{
+ d = user.d;
+ return *this;
+}
+
+bool KUser::operator==(const KUser &user) const
+{
+ return isValid() && d->uid == user.d->uid;
+}
+
+bool KUser::isValid() const
+{
+ return d->uid.isValid();
+}
+
+bool KUser::isSuperUser() const
+{
+ return d->isAdmin;
+}
+
+QString KUser::loginName() const
+{
+ return d->loginName;
+}
+
+QString KUser::homeDir() const
+{
+ return d->homeDir;
+}
+
+// Some RAII objects to help uninitializing/destroying WinAPI stuff
+// used in faceIconPath.
+class COMInitializer
+{
+public:
+ COMInitializer()
+ : result(CoInitialize(nullptr))
+ {
+ }
+ ~COMInitializer()
+ {
+ if (SUCCEEDED(result)) {
+ CoUninitialize();
+ }
+ }
+ HRESULT result;
+};
+class W32Library
+{
+public:
+ W32Library(HMODULE h)
+ : h(h)
+ {
+ }
+ ~W32Library()
+ {
+ if (h) {
+ FreeLibrary(h);
+ }
+ }
+ operator HMODULE()
+ {
+ return h;
+ }
+ HMODULE h;
+};
+
+// faceIconPath uses undocumented Windows API known as SHGetUserPicturePath,
+// only accessible by ordinal, unofficially documented at
+// http://undoc.airesoft.co.uk/shell32.dll/SHGetUserPicturePath.php
+
+// The function has a different ordinal and parameters on Windows XP and Vista/7.
+// These structs encapsulate the differences.
+
+struct FaceIconPath_XP {
+ typedef HRESULT(WINAPI *funcptr_t)(LPCWSTR, DWORD, LPWSTR);
+ static const int ordinal = 233;
+ static HRESULT getPicturePath(funcptr_t SHGetUserPicturePathXP, LPCWSTR username, LPWSTR buf, UINT bufsize)
+ {
+ Q_UNUSED(bufsize);
+ // assumes the buffer is MAX_PATH in size
+ return SHGetUserPicturePathXP(username, 0, buf);
+ }
+};
+struct FaceIconPath_Vista {
+ typedef HRESULT(WINAPI *funcptr_t)(LPCWSTR, DWORD, LPWSTR, UINT);
+ static const int ordinal = 261;
+ static HRESULT getPicturePath(funcptr_t SHGetUserPicturePathV, LPCWSTR username, LPWSTR buf, UINT bufsize)
+ {
+ return SHGetUserPicturePathV(username, 0, buf, bufsize);
+ }
+};
+
+template<typename Platform>
+static QString faceIconPathImpl(LPCWSTR username)
+{
+ static COMInitializer COMinit;
+
+ static W32Library shellMod = LoadLibraryA("shell32.dll");
+ if (!shellMod) {
+ return QString();
+ }
+ static typename Platform::funcptr_t sgupp_ptr =
+ reinterpret_cast<typename Platform::funcptr_t>(GetProcAddress(shellMod, MAKEINTRESOURCEA(Platform::ordinal)));
+ if (!sgupp_ptr) {
+ return QString();
+ }
+
+ WCHAR pathBuf[MAX_PATH];
+
+ HRESULT res = Platform::getPicturePath(sgupp_ptr, username, pathBuf, MAX_PATH);
+ if (res != S_OK) {
+ return QString();
+ }
+ return QString::fromWCharArray(pathBuf);
+}
+
+QString KUser::faceIconPath() const
+{
+ if (!isValid()) {
+ return QString();
+ }
+
+ LPCWSTR username = reinterpret_cast<const WCHAR *>(d->loginName.utf16());
+ return faceIconPathImpl<FaceIconPath_Vista>(username);
+}
+
+QString KUser::shell() const
+{
+ return isValid() ? QStringLiteral("cmd.exe") : QString();
+}
+
+KUserId KUser::userId() const
+{
+ return d->uid;
+}
+
+KGroupId KUser::groupId() const
+{
+ return d->gid;
+}
+
+QVariant KUser::property(UserProperty which) const
+{
+ if (which == FullName) {
+ return QVariant(d->fullName);
+ }
+
+ return QVariant();
+}
+
+KUser::~KUser()
+{
+}
+
+class KUserGroupPrivate : public QSharedData
+{
+public:
+ QString name;
+ KGroupId gid;
+ KUserGroupPrivate()
+ {
+ }
+ KUserGroupPrivate(const QString &name, KGroupId id)
+ : name(name)
+ , gid(id)
+ {
+ if (!name.isEmpty()) {
+ PBYTE groupInfoTmp = nullptr;
+ NET_API_STATUS status = NetGroupGetInfo(nullptr, (LPCWSTR)name.utf16(), 0, &groupInfoTmp);
+ // must always be freed, even on error
+ ScopedNetApiBuffer<GROUP_INFO_0> groupInfo((GROUP_INFO_0 *)groupInfoTmp);
+ if (status != NERR_Success) {
+ qCWarning(KCOREADDONS_DEBUG) << "Failed to find group with name" << name << "error =" << status;
+ groupInfo.reset();
+ }
+ if (!id.isValid()) {
+ gid = KGroupId::fromName(name);
+ }
+ }
+ }
+};
+
+KUserGroup::KUserGroup(const QString &_name)
+ : d(new KUserGroupPrivate(_name, KGroupId()))
+{
+}
+
+KUserGroup::KUserGroup(const char *_name)
+ : d(new KUserGroupPrivate(QLatin1String(_name), KGroupId()))
+{
+}
+
+static QString nameFromGroupId(KGroupId gid)
+{
+ if (!gid.isValid()) {
+ return QString();
+ }
+
+ DWORD bufferLen = UNLEN + 1;
+ WCHAR buffer[UNLEN + 1];
+ DWORD domainBufferLen = UNLEN + 1;
+ WCHAR domainBuffer[UNLEN + 1];
+ SID_NAME_USE eUse;
+ QString name;
+ if (LookupAccountSidW(NULL, gid.nativeId(), buffer, &bufferLen, domainBuffer, &domainBufferLen, &eUse)) {
+ if (eUse == SidTypeGroup || eUse == SidTypeWellKnownGroup) {
+ name = QString::fromWCharArray(buffer);
+ } else {
+ qCWarning(KCOREADDONS_DEBUG) << QString::fromWCharArray(buffer) << "is not a group, SID type is" << eUse;
+ }
+ }
+ return name;
+}
+
+KUserGroup::KUserGroup(KGroupId gid)
+ : d(new KUserGroupPrivate(nameFromGroupId(gid), gid))
+{
+}
+
+KUserGroup::KUserGroup(K_GID gid)
+{
+ KGroupId groupId(gid);
+ d = new KUserGroupPrivate(nameFromGroupId(groupId), groupId);
+}
+
+KUserGroup::KUserGroup(KUser::UIDMode mode)
+{
+ KGroupId gid;
+ if (mode == KUser::UseEffectiveUID) {
+ gid = KGroupId::currentGroupId();
+ } else if (mode == KUser::UseRealUserID) {
+ gid = KGroupId::currentEffectiveGroupId();
+ }
+ d = new KUserGroupPrivate(nameFromGroupId(gid), gid);
+}
+
+KUserGroup::KUserGroup(const KUserGroup &group)
+ : d(group.d)
+{
+}
+
+KUserGroup &KUserGroup::operator=(const KUserGroup &group)
+{
+ d = group.d;
+ return *this;
+}
+
+bool KUserGroup::operator==(const KUserGroup &group) const
+{
+ return isValid() && d->gid == group.d->gid && d->name == group.d->name;
+}
+
+bool KUserGroup::isValid() const
+{
+ return d->gid.isValid() && !d->name.isEmpty();
+}
+
+QString KUserGroup::name() const
+{
+ return d->name;
+}
+
+KGroupId KUserGroup::groupId() const
+{
+ return d->gid;
+}
+
+KUserGroup::~KUserGroup()
+{
+}
+
+QList<KUser> KUser::allUsers(uint maxCount)
+{
+ QList<KUser> result;
+ // No advantage if we take a USER_INFO_11, since there is no way of copying it
+ // and it is not owned by this function!
+ // -> get a USER_INFO_0 instead and then use KUser(QString)
+ // USER_INFO_23 or USER_INFO_23 would be ideal here since they contains a SID,
+ // but that fails with error code 0x7c (bad level)
+ enumerateAllUsers<USER_INFO_0>(maxCount, [&result](const USER_INFO_0 &info) {
+ result.append(KUser(QString::fromWCharArray(info.usri0_name)));
+ });
+ return result;
+}
+
+QStringList KUser::allUserNames(uint maxCount)
+{
+ QStringList result;
+ enumerateAllUsers<USER_INFO_0>(maxCount, [&result](const USER_INFO_0 &info) {
+ result.append(QString::fromWCharArray(info.usri0_name));
+ });
+ return result;
+}
+
+QList<KUserGroup> KUserGroup::allGroups(uint maxCount)
+{
+ QList<KUserGroup> result;
+ // MSDN documentation say 3 is a valid level, however the function fails with invalid level!!!
+ // User GROUP_INFO_0 instead...
+ enumerateAllGroups<GROUP_INFO_0>(maxCount, [&result](const GROUP_INFO_0 &groupInfo) {
+ result.append(KUserGroup(QString::fromWCharArray(groupInfo.grpi0_name)));
+ });
+ return result;
+}
+
+QStringList KUserGroup::allGroupNames(uint maxCount)
+{
+ QStringList result;
+ enumerateAllGroups<GROUP_INFO_0>(maxCount, [&result](const GROUP_INFO_0 &groupInfo) {
+ result.append(QString::fromWCharArray(groupInfo.grpi0_name));
+ });
+ return result;
+}
+
+QList<KUserGroup> KUser::groups(uint maxCount) const
+{
+ QList<KUserGroup> result;
+ if (!isValid()) {
+ return result;
+ }
+ enumerateGroupsForUser<GROUP_USERS_INFO_0>(maxCount, d->loginName, [&result](const GROUP_USERS_INFO_0 &info) {
+ result.append(KUserGroup(QString::fromWCharArray(info.grui0_name)));
+ });
+ return result;
+}
+
+QStringList KUser::groupNames(uint maxCount) const
+{
+ QStringList result;
+ if (!isValid()) {
+ return result;
+ }
+ enumerateGroupsForUser<GROUP_USERS_INFO_0>(maxCount, d->loginName, [&result](const GROUP_USERS_INFO_0 &info) {
+ result.append(QString::fromWCharArray(info.grui0_name));
+ });
+ return result;
+}
+
+QList<KUser> KUserGroup::users(uint maxCount) const
+{
+ QList<KUser> result;
+ if (!isValid()) {
+ return result;
+ }
+ enumerateGroupsForUser<GROUP_USERS_INFO_0>(maxCount, d->name, [&result](const GROUP_USERS_INFO_0 &info) {
+ result.append(KUser(QString::fromWCharArray(info.grui0_name)));
+ });
+ return result;
+}
+
+QStringList KUserGroup::userNames(uint maxCount) const
+{
+ QStringList result;
+ if (!isValid()) {
+ return result;
+ }
+ enumerateGroupsForUser<GROUP_USERS_INFO_0>(maxCount, d->name, [&result](const GROUP_USERS_INFO_0 &info) {
+ result.append(QString::fromWCharArray(info.grui0_name));
+ });
+ return result;
+}
+
+static const auto invalidSidString = QStringLiteral("<invalid SID>");
+
+static QString sidToString(void *sid)
+{
+ if (!sid || !IsValidSid(sid)) {
+ return invalidSidString;
+ }
+ WCHAR *sidStr; // allocated by ConvertStringSidToSidW, must be freed using LocalFree()
+ if (!ConvertSidToStringSidW(sid, &sidStr)) {
+ return invalidSidString;
+ }
+ QString ret = QString::fromWCharArray(sidStr);
+ LocalFree(sidStr);
+ return ret;
+}
+
+struct WindowsSIDWrapper : public QSharedData {
+ char sidBuffer[SECURITY_MAX_SID_SIZE];
+ /** @return a copy of @p sid or null if sid is not valid or an error occurs */
+ static WindowsSIDWrapper *copySid(PSID sid)
+ {
+ if (!sid || !IsValidSid(sid)) {
+ return nullptr;
+ }
+ // create a copy of sid
+ WindowsSIDWrapper *copy = new WindowsSIDWrapper();
+ bool success = CopySid(SECURITY_MAX_SID_SIZE, copy->sidBuffer, sid);
+ if (!success) {
+ QString sidString = sidToString(sid);
+ qCWarning(KCOREADDONS_DEBUG, "Failed to copy SID %s, error = %d", qPrintable(sidString), (int)GetLastError());
+ delete copy;
+ return nullptr;
+ }
+ return copy;
+ }
+};
+
+template<>
+KUserOrGroupId<void *>::KUserOrGroupId()
+{
+}
+
+template<>
+KUserOrGroupId<void *>::~KUserOrGroupId()
+{
+}
+
+template<>
+KUserOrGroupId<void *>::KUserOrGroupId(const KUserOrGroupId<void *> &other)
+ : data(other.data)
+{
+}
+
+template<>
+inline KUserOrGroupId<void *> &KUserOrGroupId<void *>::operator=(const KUserOrGroupId<void *> &other)
+{
+ data = other.data;
+ return *this;
+}
+
+template<>
+KUserOrGroupId<void *>::KUserOrGroupId(void *nativeId)
+ : data(WindowsSIDWrapper::copySid(nativeId))
+{
+}
+
+template<>
+bool KUserOrGroupId<void *>::isValid() const
+{
+ return data;
+}
+
+template<>
+void *KUserOrGroupId<void *>::nativeId() const
+{
+ if (!data) {
+ return nullptr;
+ }
+ return data->sidBuffer;
+}
+
+template<>
+bool KUserOrGroupId<void *>::operator==(const KUserOrGroupId<void *> &other) const
+{
+ if (data) {
+ if (!other.data) {
+ return false;
+ }
+ return EqualSid(data->sidBuffer, other.data->sidBuffer);
+ }
+ return !other.data; // only equal if other data is also invalid
+}
+
+template<>
+bool KUserOrGroupId<void *>::operator!=(const KUserOrGroupId<void *> &other) const
+{
+ return !(*this == other);
+}
+
+template<>
+QString KUserOrGroupId<void *>::toString() const
+{
+ return sidToString(data ? data->sidBuffer : nullptr);
+}
+
+/** T must be either KUserId or KGroupId, Callback has signature T(PSID, SID_NAME_USE) */
+template<class T, class Callback>
+static T sidFromName(const QString &name, Callback callback)
+{
+ if (name.isEmpty()) {
+ // for some reason empty string will always return S-1-5-32 which is of type domain
+ // we only want users or groups -> return invalid
+ return T();
+ }
+ char buffer[SECURITY_MAX_SID_SIZE];
+ DWORD sidLength = SECURITY_MAX_SID_SIZE;
+ // ReferencedDomainName must be passed or LookupAccountNameW fails
+ // Documentation says it is optional, however if not passed the function fails and returns the required size
+ WCHAR domainBuffer[1024];
+ DWORD domainBufferSize = 1024;
+ SID_NAME_USE sidType;
+ bool ok = LookupAccountNameW(nullptr, (LPCWSTR)name.utf16(), buffer, &sidLength, domainBuffer, &domainBufferSize, &sidType);
+ if (!ok) {
+ qCWarning(KCOREADDONS_DEBUG) << "Failed to lookup account" << name << "error code =" << GetLastError();
+ return T();
+ }
+ return callback(buffer, sidType);
+}
+
+KUserId KUserId::fromName(const QString &name)
+{
+ return sidFromName<KUserId>(name, [&](PSID sid, SID_NAME_USE sidType) -> KUserId {
+ if (sidType != SidTypeUser && sidType != SidTypeDeletedAccount) {
+ qCWarning(KCOREADDONS_DEBUG).nospace() << "Failed to lookup user name " << name << ": resulting SID " << sidToString(sid)
+ << " is not a user."
+ " Got SID type "
+ << sidType << " instead.";
+ return KUserId();
+ }
+ return KUserId(sid);
+ });
+}
+
+KGroupId KGroupId::fromName(const QString &name)
+{
+ return sidFromName<KGroupId>(name, [&](PSID sid, SID_NAME_USE sidType) -> KGroupId {
+ if (sidType != SidTypeGroup && sidType != SidTypeWellKnownGroup) {
+ qCWarning(KCOREADDONS_DEBUG).nospace() << "Failed to lookup user name " << name << ": resulting SID " << sidToString(sid)
+ << " is not a group."
+ " Got SID type "
+ << sidType << " instead.";
+ return KGroupId();
+ }
+ return KGroupId(sid);
+ });
+}
+
+static std::unique_ptr<char[]> queryProcessInformation(TOKEN_INFORMATION_CLASS type)
+{
+ HANDLE _token;
+ if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &_token)) {
+ qCWarning(KCOREADDONS_DEBUG, "Failed to get the token for the current process: %d", (int)GetLastError());
+ return nullptr;
+ }
+ ScopedHANDLE token(_token, handleCloser);
+ // query required size
+ DWORD requiredSize;
+ if (!GetTokenInformation(token.get(), type, nullptr, 0, &requiredSize)) {
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
+ qCWarning(KCOREADDONS_DEBUG, "Failed to get the required size for the token information %d: %d", type, (int)GetLastError());
+ return nullptr;
+ }
+ }
+ std::unique_ptr<char[]> buffer(new char[requiredSize]);
+ if (!GetTokenInformation(token.get(), type, buffer.get(), requiredSize, &requiredSize)) {
+ qCWarning(KCOREADDONS_DEBUG, "Failed to get token information %d from current process: %d", type, (int)GetLastError());
+ return nullptr;
+ }
+ return buffer;
+}
+
+KUserId KUserId::currentUserId()
+{
+ std::unique_ptr<char[]> userTokenBuffer = queryProcessInformation(TokenUser);
+ TOKEN_USER *userToken = (TOKEN_USER *)userTokenBuffer.get();
+ return KUserId(userToken->User.Sid);
+}
+
+KGroupId KGroupId::currentGroupId()
+{
+ std::unique_ptr<char[]> primaryGroupBuffer = queryProcessInformation(TokenPrimaryGroup);
+ TOKEN_PRIMARY_GROUP *primaryGroup = (TOKEN_PRIMARY_GROUP *)primaryGroupBuffer.get();
+ return KGroupId(primaryGroup->PrimaryGroup);
+}
+
+KUserId KUserId::currentEffectiveUserId()
+{
+ return currentUserId();
+}
+
+KGroupId KGroupId::currentEffectiveGroupId()
+{
+ return currentGroupId();
+}
+
+KCOREADDONS_EXPORT uint qHash(const KUserId &id, uint seed)
+{
+ if (!id.isValid()) {
+ return seed;
+ }
+ // we can't just hash the pointer since equal object must have the same hash -> hash contents
+ char *sid = (char *)id.nativeId();
+ return qHash(QByteArray::fromRawData(sid, GetLengthSid(sid)), seed);
+}
+
+KCOREADDONS_EXPORT uint qHash(const KGroupId &id, uint seed)
+{
+ if (!id.isValid()) {
+ return seed;
+ }
+ // we can't just hash the pointer since equal object must have the same hash -> hash contents
+ char *sid = (char *)id.nativeId();
+ return qHash(QByteArray::fromRawData(sid, GetLengthSid(sid)), seed);
+}
--- /dev/null
+# always install the mime-types
+install(FILES kde5.xml DESTINATION ${KDE_INSTALL_MIMEDIR})
+
+# for KDE frameworks 5 we require at least version 1.3
+find_package(SharedMimeInfo 1.3)
+set_package_properties(SharedMimeInfo PROPERTIES
+ TYPE OPTIONAL
+ PURPOSE "Allows KDE applications to determine file types"
+ )
+
+# update XDG mime-types if shared mime info is around
+if(SharedMimeInfo_FOUND)
+ update_xdg_mimetypes(${KDE_INSTALL_MIMEDIR})
+endif()
--- /dev/null
+function get_files
+{
+ echo kde5.xml
+}
+
+function po_for_file
+{
+ case "$1" in
+ kde5.xml)
+ echo kde5_xml_mimetypes.po
+ ;;
+ esac
+}
+
+function tags_for_file
+{
+ case "$1" in
+ kde5.xml)
+ echo comment
+ ;;
+ esac
+}
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+It comes with ABSOLUTELY NO WARRANTY, to the extent permitted by law. You may
+redistribute copies of update-mime-database under the terms of the GNU General
+Public License. For more information about these matters, see the file named
+COPYING.
+-->
+<!--
+Notes:
+- the mime types in this file are valid with the version 0.30 of the
+ shared-mime-info package.
+- the "fdo #xxxxx" are the wish in the freedesktop.org bug database to include
+ the mime type there.
+-->
+
+<!-- IMPORTANT: before you add anything here, please consider submitting
+ it upstream to shared-mime-info instead.
+ This file is only for things that are either urgently needed, or
+ which have been refused upstream.
+ It also has KDE-specific mimetypes, but remember that having such things
+ in s-m-i means that someone receiving such a file by email or from a website
+ will at least get a description of what it is, even without kcoreaddons installed.-->
+<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
+ <mime-type type="application/relaxng">
+ <sub-class-of type="application/xml"/>
+ <comment>RELAX NG</comment>
+ <comment xml:lang="ar">RELAX NG</comment>
+ <comment xml:lang="az">RELAX NG</comment>
+ <comment xml:lang="be">RELAX NG</comment>
+ <comment xml:lang="ca">RELAX NG</comment>
+ <comment xml:lang="cs">RELAX NG</comment>
+ <comment xml:lang="de">RELAX NG</comment>
+ <comment xml:lang="el">RELAX NG</comment>
+ <comment xml:lang="en_GB">RELAX NG</comment>
+ <comment xml:lang="es">RELAX NG</comment>
+ <comment xml:lang="eu">RELAX NG</comment>
+ <comment xml:lang="fi">RELAX NG</comment>
+ <comment xml:lang="fr">RELAX NG</comment>
+ <comment xml:lang="hi">रिलॅक्स एनजी</comment>
+ <comment xml:lang="hu">RELAX NG</comment>
+ <comment xml:lang="ia">RELAX NG</comment>
+ <comment xml:lang="it">RELAX NG</comment>
+ <comment xml:lang="ko">RELAX NG</comment>
+ <comment xml:lang="lt">RELAX NG</comment>
+ <comment xml:lang="nl">RELAX NG</comment>
+ <comment xml:lang="nn">RELAX NG</comment>
+ <comment xml:lang="pl">RELAX NG</comment>
+ <comment xml:lang="pt">RELAX NG</comment>
+ <comment xml:lang="pt_BR">RELAX NG</comment>
+ <comment xml:lang="ro">RELAX NG</comment>
+ <comment xml:lang="sl">RELAX NG</comment>
+ <comment xml:lang="sv">RELAX NG</comment>
+ <comment xml:lang="tr">RELAX NG</comment>
+ <comment xml:lang="uk">RELAX NG</comment>
+ <comment xml:lang="vi">RELAX NG</comment>
+ <comment xml:lang="zh_CN">RELAX NG</comment>
+ <glob pattern="*.rng"/>
+ </mime-type>
+ <mime-type type="application/x-cda">
+ <comment>CD audio</comment>
+ <comment xml:lang="ar">صوت CD</comment>
+ <comment xml:lang="az">CD səsi</comment>
+ <comment xml:lang="be">Аўдыё CD</comment>
+ <comment xml:lang="ca">CD d'àudio</comment>
+ <comment xml:lang="cs">Audio CD</comment>
+ <comment xml:lang="de">CD-Audio</comment>
+ <comment xml:lang="el">CD ήχου</comment>
+ <comment xml:lang="en_GB">CD audio</comment>
+ <comment xml:lang="es">Audio CD</comment>
+ <comment xml:lang="eu">Audio CDa</comment>
+ <comment xml:lang="fi">CD-ääni</comment>
+ <comment xml:lang="fr">CD audio</comment>
+ <comment xml:lang="hi">सीडी ऑडियो</comment>
+ <comment xml:lang="hu">CD-hang</comment>
+ <comment xml:lang="ia">Audio CD</comment>
+ <comment xml:lang="it">Audio CD</comment>
+ <comment xml:lang="ko">CD 오디오</comment>
+ <comment xml:lang="lt">Garso CD</comment>
+ <comment xml:lang="nl">CD-audio</comment>
+ <comment xml:lang="nn">CD-lyd</comment>
+ <comment xml:lang="pl">Płyta CD z dźwiękiem</comment>
+ <comment xml:lang="pt">Áudio de CD</comment>
+ <comment xml:lang="pt_BR">Áudio de CD</comment>
+ <comment xml:lang="ro">CD audio</comment>
+ <comment xml:lang="sl">Zvočni CD</comment>
+ <comment xml:lang="sv">Cd-ljud</comment>
+ <comment xml:lang="ta">CD ஒலிக்கோப்பை</comment>
+ <comment xml:lang="tr">CD sesi</comment>
+ <comment xml:lang="uk">звуковий компакт-диск</comment>
+ <comment xml:lang="vi">âm thanh CD</comment>
+ <comment xml:lang="zh_CN">CD 音频</comment>
+ <glob pattern="*.cda"/>
+ </mime-type>
+ <mime-type type="application/x-font-snf">
+ <comment>SNF bitmap font</comment>
+ <comment xml:lang="ar">خط SNF bitmap</comment>
+ <comment xml:lang="az">SNF bitmap şrifti</comment>
+ <comment xml:lang="be">Растравы шрыфт SNF</comment>
+ <comment xml:lang="ca">Tipus de lletra de mapa de bits SNF</comment>
+ <comment xml:lang="cs">Bitmapový font SNF</comment>
+ <comment xml:lang="de">SNF-Bitmap-Schriftart</comment>
+ <comment xml:lang="el">Γραμματοσειρά bitmap SNF</comment>
+ <comment xml:lang="en_GB">SNF bitmap font</comment>
+ <comment xml:lang="es">Tipo de letra de mapa de bits SNF</comment>
+ <comment xml:lang="eu">SNF bit-mapa letra-tipoa</comment>
+ <comment xml:lang="fi">SNF-bittikarttafontti</comment>
+ <comment xml:lang="fr">Police « bitmap SNF »</comment>
+ <comment xml:lang="hi">एस एन एफ बिटमैप फोंट</comment>
+ <comment xml:lang="hu">SNF-betűtípus</comment>
+ <comment xml:lang="ia">font de bitmap SNF</comment>
+ <comment xml:lang="it">Carattere bitmap SNF</comment>
+ <comment xml:lang="ko">SNF 비트맵 글꼴</comment>
+ <comment xml:lang="lt">SNF rastrinis šriftas</comment>
+ <comment xml:lang="nl">SNF-bitmap-lettertype</comment>
+ <comment xml:lang="nn">SNF-punktskrift</comment>
+ <comment xml:lang="pl">Czcionka bitmapowa SNF</comment>
+ <comment xml:lang="pt">Tipo de letra por imagens SNF</comment>
+ <comment xml:lang="pt_BR">Fonte bitmap SNF</comment>
+ <comment xml:lang="ro">font SNF hartă de biți</comment>
+ <comment xml:lang="sl">Bitna pisava SNF</comment>
+ <comment xml:lang="sv">SNF punktavbildat teckensnitt</comment>
+ <comment xml:lang="tr">SNF bit eşlem yazı tipi</comment>
+ <comment xml:lang="uk">растровий файл SNF</comment>
+ <comment xml:lang="vi">phông chữ kiểu bản đồ bit SNF</comment>
+ <comment xml:lang="zh_CN">SNF 点阵字体</comment>
+ <glob pattern="*.snf"/>
+ <glob pattern="*.snf.Z"/>
+ <glob pattern="*.snf.gz"/>
+ </mime-type>
+ <mime-type type="application/x-java-applet">
+ <comment>Java applet</comment>
+ <comment xml:lang="ar">بريمج جافا</comment>
+ <comment xml:lang="az">Java applet</comment>
+ <comment xml:lang="be">Аплет Java</comment>
+ <comment xml:lang="ca">Miniaplicació Java</comment>
+ <comment xml:lang="cs">Java applet</comment>
+ <comment xml:lang="de">Java-Miniprogramm</comment>
+ <comment xml:lang="el">Μικροεφαρμογή Java</comment>
+ <comment xml:lang="en_GB">Java applet</comment>
+ <comment xml:lang="es">Miniaplicación Java</comment>
+ <comment xml:lang="eu">Java aplikaziotxoa</comment>
+ <comment xml:lang="fi">Java-sovelma</comment>
+ <comment xml:lang="fr">Applet Java</comment>
+ <comment xml:lang="hi">जावा ऐपलेट</comment>
+ <comment xml:lang="hu">Java-kisalkalmazás</comment>
+ <comment xml:lang="ia">Applet Java</comment>
+ <comment xml:lang="it">Applet Java</comment>
+ <comment xml:lang="ko">자바 애플릿</comment>
+ <comment xml:lang="lt">Java programėlė</comment>
+ <comment xml:lang="nl">Java-applet</comment>
+ <comment xml:lang="nn">Java-applett</comment>
+ <comment xml:lang="pl">Aplet Javy</comment>
+ <comment xml:lang="pt">'Applet' de Java</comment>
+ <comment xml:lang="pt_BR">Miniaplicativo Java</comment>
+ <comment xml:lang="ro">miniaplicație Java</comment>
+ <comment xml:lang="sl">Aplet Java</comment>
+ <comment xml:lang="sv">Java-miniprogram</comment>
+ <comment xml:lang="tr">Java programcığı</comment>
+ <comment xml:lang="uk">аплет Java</comment>
+ <comment xml:lang="vi">tiểu ứng dụng Java</comment>
+ <comment xml:lang="zh_CN">Java 小程序</comment>
+ </mime-type>
+ <mime-type type="application/x-khtml-adaptor">
+ <comment>KHTML Extension Adaptor</comment>
+ <comment xml:lang="ar">مكيف الامتدادات KHTML</comment>
+ <comment xml:lang="az">KHTML Genişləndirici Uzlaşdırıcısı</comment>
+ <comment xml:lang="be">Адаптэр расшырэння KHTM</comment>
+ <comment xml:lang="ca">Adaptador de l'extensió KHTML</comment>
+ <comment xml:lang="cs">Adaptér pro KHTML rozšíření</comment>
+ <comment xml:lang="de">Adapter für KHTML-Erweiterungen</comment>
+ <comment xml:lang="el">Προσαρμογέας επέκτασης KHTML</comment>
+ <comment xml:lang="en_GB">KHTML Extension Adaptor</comment>
+ <comment xml:lang="es">Adaptador de extensión de KHTML</comment>
+ <comment xml:lang="eu">KHTML hedapen-egokitzailea</comment>
+ <comment xml:lang="fi">KHTML-laajennussovitin</comment>
+ <comment xml:lang="fr">Adaptateur d'extension « KHTML »</comment>
+ <comment xml:lang="hi">केएचटीएमएल विस्तारण अडैप्टर</comment>
+ <comment xml:lang="hu">KHTML-es kiterjesztéskezelő</comment>
+ <comment xml:lang="ia">Adaptator pro KHTML Extension</comment>
+ <comment xml:lang="it">Adattatore di estensioni di KHTML</comment>
+ <comment xml:lang="ko">KHTML 확장 기능 어댑터</comment>
+ <comment xml:lang="lt">KHTML plėtinių adapteris</comment>
+ <comment xml:lang="nl">KHTML-extensie aanpassen</comment>
+ <comment xml:lang="nn">KHTML-utvidingstilpassar</comment>
+ <comment xml:lang="pl">Adapter rozszerzeń KHTML</comment>
+ <comment xml:lang="pt">Adaptador de Extensões do KHTML</comment>
+ <comment xml:lang="pt_BR">Adaptador de extensões do KHTML</comment>
+ <comment xml:lang="ro">adaptor de extensii KHTML</comment>
+ <comment xml:lang="sl">Prilagodilnik razširitve KHTML</comment>
+ <comment xml:lang="sv">KHTML-utökningsanpassning</comment>
+ <comment xml:lang="tr">KHTML Uzatma Adaptörü</comment>
+ <comment xml:lang="uk">адаптер розширень KHTML</comment>
+ <comment xml:lang="vi">bộ tiếp hợp mở rộng KHTML</comment>
+ <comment xml:lang="zh_CN">KHTML 扩展适配器</comment>
+ </mime-type>
+ <mime-type type="application/x-kcsrc">
+ <comment>KDE color scheme</comment>
+ <comment xml:lang="ar">مخطط ألوان كدي</comment>
+ <comment xml:lang="az">KDE rəng sxemi</comment>
+ <comment xml:lang="be">Каляровая схема KDE</comment>
+ <comment xml:lang="ca">Esquema de color del KDE</comment>
+ <comment xml:lang="cs">Barevné schéma KDE</comment>
+ <comment xml:lang="de">KDE-Farbschema</comment>
+ <comment xml:lang="el">Θέμα χρωμάτων KDE</comment>
+ <comment xml:lang="en_GB">KDE colour scheme</comment>
+ <comment xml:lang="es">Esquema de color de KDE</comment>
+ <comment xml:lang="eu">KDE-ren kolore antolaera</comment>
+ <comment xml:lang="fi">KDE-värimalli</comment>
+ <comment xml:lang="fr">Schéma de couleurs de KDE</comment>
+ <comment xml:lang="hi">केडीई रंग योजना</comment>
+ <comment xml:lang="hu">KDE-színséma</comment>
+ <comment xml:lang="ia">Schema de color KDE</comment>
+ <comment xml:lang="it">Schema di colori di KDE</comment>
+ <comment xml:lang="ko">KDE 색 배열</comment>
+ <comment xml:lang="lt">KDE spalvų rinkinys</comment>
+ <comment xml:lang="nl">KDE-kleurenschema</comment>
+ <comment xml:lang="nn">KDE-fargetema</comment>
+ <comment xml:lang="pl">Zestaw kolorów KDE</comment>
+ <comment xml:lang="pt">Esquema de cores do KDE</comment>
+ <comment xml:lang="pt_BR">Esquema de cores do KDE</comment>
+ <comment xml:lang="ro">schemă de culori KDE</comment>
+ <comment xml:lang="sl">Barvna shema KDE</comment>
+ <comment xml:lang="sv">KDE-färgschema</comment>
+ <comment xml:lang="ta">கே.டீ.யீ. நிறத் திட்டம்</comment>
+ <comment xml:lang="tr">KDE renk şeması</comment>
+ <comment xml:lang="uk">схема кольорів KDE</comment>
+ <comment xml:lang="vi">quy hoạch màu KDE</comment>
+ <comment xml:lang="zh_CN">KDE 配色方案</comment>
+ <acronym>KDE</acronym>
+ <expanded-acronym>K Desktop Environment</expanded-acronym>
+ <glob pattern="*.kcsrc"/>
+ </mime-type>
+ <mime-type type="application/x-kns">
+ <sub-class-of type="application/zip"/>
+ <comment>KNewStuff package</comment>
+ <comment xml:lang="ar">حزمة KNewStuff</comment>
+ <comment xml:lang="az">KNewStuff paketi</comment>
+ <comment xml:lang="be">Пакет KNewStuff</comment>
+ <comment xml:lang="ca">Paquet del KNewStuff</comment>
+ <comment xml:lang="cs">Balíček KNewStuff</comment>
+ <comment xml:lang="de">KNewStuff-Paket</comment>
+ <comment xml:lang="el">Πακέτο KNewStuff</comment>
+ <comment xml:lang="en_GB">KNewStuff package</comment>
+ <comment xml:lang="es">Paquete de KNewStuff</comment>
+ <comment xml:lang="eu">KNewStuff-erako paketea</comment>
+ <comment xml:lang="fi">KNewStuff-paketti</comment>
+ <comment xml:lang="fr">Paquet pour KNewStuff</comment>
+ <comment xml:lang="hi">के-न्यूस्टफ पैकेज</comment>
+ <comment xml:lang="hu">KNewStuff-csomag</comment>
+ <comment xml:lang="ia">Pacchetto de KNewStuff</comment>
+ <comment xml:lang="it">Pacchetto di KNewStuff</comment>
+ <comment xml:lang="ko">KNewStuff 패키지</comment>
+ <comment xml:lang="lt">KNewStuff paketas</comment>
+ <comment xml:lang="nl">KNewStuff-pakket</comment>
+ <comment xml:lang="nn">KNewStuff-pakke</comment>
+ <comment xml:lang="pl">Pakiet KNewStuff</comment>
+ <comment xml:lang="pt">Pacote do KNewStuff</comment>
+ <comment xml:lang="pt_BR">Pacote do KNewStuff</comment>
+ <comment xml:lang="ro">pachet KNewStuff</comment>
+ <comment xml:lang="sl">Paket KNewStuff</comment>
+ <comment xml:lang="sv">Heta nyheter-paket</comment>
+ <comment xml:lang="ta">KNewStuff தொகுப்பு</comment>
+ <comment xml:lang="tr">KNewStuff paketi</comment>
+ <comment xml:lang="uk">пакунок KNewStuff</comment>
+ <comment xml:lang="vi">gói KNewStuff</comment>
+ <comment xml:lang="zh_CN">KNewStuff 软件包</comment>
+ <glob pattern="*.kns"/>
+ </mime-type>
+ <mime-type type="application/x-kwallet"> <!-- fdo #6326 rejected, will stay KDE-specific -->
+ <comment>KWallet wallet</comment>
+ <comment xml:lang="ar">حافظة KWallet</comment>
+ <comment xml:lang="az">KWallet cüzdanı</comment>
+ <comment xml:lang="be">Кашалёк KWallet</comment>
+ <comment xml:lang="ca">Cartera del KWallet</comment>
+ <comment xml:lang="cs">Schránka KWallet</comment>
+ <comment xml:lang="de">KWallet-Passwortspeicher</comment>
+ <comment xml:lang="el">Πορτοφόλι KWallet</comment>
+ <comment xml:lang="en_GB">KWallet wallet</comment>
+ <comment xml:lang="es">Cartera de KWallet</comment>
+ <comment xml:lang="eu">KWallet-eko zorroa</comment>
+ <comment xml:lang="fi">KWallet-lompakko</comment>
+ <comment xml:lang="fr">Portefeuille pour KWallet</comment>
+ <comment xml:lang="hi">के-वॉलेट बटुआ</comment>
+ <comment xml:lang="hu">KWallet-jelszófájl</comment>
+ <comment xml:lang="ia">Kwallet :portafolio</comment>
+ <comment xml:lang="it">Portafogli KWallet</comment>
+ <comment xml:lang="ko">KWallet 지갑</comment>
+ <comment xml:lang="lt">KWallet slaptažodinė</comment>
+ <comment xml:lang="nl">KWallet-portefeuille</comment>
+ <comment xml:lang="nn">KWallet-lommebok</comment>
+ <comment xml:lang="pl">Portfel KDE</comment>
+ <comment xml:lang="pt">Carteira da KWallet</comment>
+ <comment xml:lang="pt_BR">Carteira do KWallet</comment>
+ <comment xml:lang="ro">portofel KWallet</comment>
+ <comment xml:lang="sl">Listnica Kwallet</comment>
+ <comment xml:lang="sv">Kwallet-plånbok</comment>
+ <comment xml:lang="tr">KWallet cüzdanı</comment>
+ <comment xml:lang="uk">торбинка KWallet</comment>
+ <comment xml:lang="vi">ví KWallet</comment>
+ <comment xml:lang="zh_CN">KWallet 钱包</comment>
+ <magic priority="80">
+ <match type="string" value="KWALLET" offset="0"/>
+ </magic>
+ <glob pattern="*.kwl"/>
+ </mime-type>
+ <mime-type type="application/x-kudesigner">
+ <comment>Kugar report template</comment>
+ <comment xml:lang="ar">قالب تقرير Kugar</comment>
+ <comment xml:lang="az">Kugar hesabat nümunəsi</comment>
+ <comment xml:lang="be">Шаблон справаздачы Kugar</comment>
+ <comment xml:lang="ca">Plantilla d'informe del Kugar</comment>
+ <comment xml:lang="cs">Šablona hlášení Kugar</comment>
+ <comment xml:lang="de">Kugar-Berichtsvorlage</comment>
+ <comment xml:lang="el">Πρότυπο αναφοράς Kugar</comment>
+ <comment xml:lang="en_GB">Kugar report template</comment>
+ <comment xml:lang="es">Plantilla de informe de Kugar</comment>
+ <comment xml:lang="eu">Kugar-rerako txosten-txantiloia</comment>
+ <comment xml:lang="fi">Kugar-raporttipohja</comment>
+ <comment xml:lang="fr">Modèle de rapport pour Kugar</comment>
+ <comment xml:lang="hi">कूगर रिपोर्ट टेम्पलेट</comment>
+ <comment xml:lang="hu">Kugar-jelentéssablon</comment>
+ <comment xml:lang="ia">Kugar : patrono de reporto</comment>
+ <comment xml:lang="it">Modello di rapporto di Kugar</comment>
+ <comment xml:lang="ko">Kugar 보고서 템플릿</comment>
+ <comment xml:lang="lt">Kugar ataskaitos šablonas</comment>
+ <comment xml:lang="nl">Kugar-rapportsjabloon</comment>
+ <comment xml:lang="nn">Rapportmal for Kugar</comment>
+ <comment xml:lang="pl">Szablon raportu Kugara</comment>
+ <comment xml:lang="pt">Modelo de relatórios do Kugar</comment>
+ <comment xml:lang="pt_BR">Modelo de relatório do Kugar</comment>
+ <comment xml:lang="ro">șablon de raport Kugar</comment>
+ <comment xml:lang="sl">Predloga za poročila Kugar</comment>
+ <comment xml:lang="sv">Kugar-rapportmall</comment>
+ <comment xml:lang="tr">Kugar rapor şablonu</comment>
+ <comment xml:lang="uk">шаблон звіту Kugar</comment>
+ <comment xml:lang="vi">mẫu báo cáo Kugar</comment>
+ <comment xml:lang="zh_CN">Kugar 报表模板</comment>
+ <glob pattern="*.kut"/>
+ </mime-type>
+ <mime-type type="application/x-plasma">
+ <sub-class-of type="application/zip"/>
+ <comment>plasmoid</comment>
+ <comment xml:lang="ar">بلازمود</comment>
+ <comment xml:lang="az">plasmoid</comment>
+ <comment xml:lang="be">плазмоід</comment>
+ <comment xml:lang="ca">Plasmoide</comment>
+ <comment xml:lang="cs">plasmoid</comment>
+ <comment xml:lang="de">Plasmoid</comment>
+ <comment xml:lang="el">πλασμοειδές</comment>
+ <comment xml:lang="en_GB">plasmoid</comment>
+ <comment xml:lang="es">plasmoide</comment>
+ <comment xml:lang="eu">plasmoidea</comment>
+ <comment xml:lang="fi">sovelma</comment>
+ <comment xml:lang="fr">composant graphique</comment>
+ <comment xml:lang="hi">प्लास्मोइड</comment>
+ <comment xml:lang="hu">plasmoid</comment>
+ <comment xml:lang="ia">plasmoid</comment>
+ <comment xml:lang="it">plasmoide</comment>
+ <comment xml:lang="ko">plasmoid</comment>
+ <comment xml:lang="lt">Plasma įskiepis</comment>
+ <comment xml:lang="nl">plasmoid</comment>
+ <comment xml:lang="nn">plasmoide</comment>
+ <comment xml:lang="pl">plazmoid</comment>
+ <comment xml:lang="pt">plasmóide</comment>
+ <comment xml:lang="pt_BR">plasmoide</comment>
+ <comment xml:lang="ro">plasmoid</comment>
+ <comment xml:lang="sl">plasmoid</comment>
+ <comment xml:lang="sv">plasmoid</comment>
+ <comment xml:lang="ta">பிளாஸ்மாய்ட்</comment>
+ <comment xml:lang="tr">plasmoid</comment>
+ <comment xml:lang="uk">плазмоїд</comment>
+ <comment xml:lang="vi">plasmoid</comment>
+ <comment xml:lang="zh_CN">Plasma 小部件</comment>
+ <glob pattern="*.plasmoid"/>
+ </mime-type>
+ <mime-type type="application/x-superkaramba">
+ <sub-class-of type="application/zip"/>
+ <comment>SuperKaramba theme</comment>
+ <comment xml:lang="ar">سمة SuperKaramba</comment>
+ <comment xml:lang="az">SuperKaramba mövzusu</comment>
+ <comment xml:lang="be">Тэма SuperKaramba</comment>
+ <comment xml:lang="ca">Tema del SuperKaramba</comment>
+ <comment xml:lang="cs">Motiv Superkaramba</comment>
+ <comment xml:lang="de">SuperKaramba-Design</comment>
+ <comment xml:lang="el">Θέμα SuperKaramba</comment>
+ <comment xml:lang="en_GB">SuperKaramba theme</comment>
+ <comment xml:lang="es">Tema de SuperKaramba</comment>
+ <comment xml:lang="eu">SuperKaramba-ko gaia</comment>
+ <comment xml:lang="fi">SuperKaramba-teema</comment>
+ <comment xml:lang="fr">Thème pour SuperKaramba</comment>
+ <comment xml:lang="hi">सूपरकरंबा स्वरूपण</comment>
+ <comment xml:lang="hu">SuperKaramba-téma</comment>
+ <comment xml:lang="ia">Thema de SuperKaramba</comment>
+ <comment xml:lang="it">Tema di SuperKaramba</comment>
+ <comment xml:lang="ko">SuperKaramba 테마</comment>
+ <comment xml:lang="lt">SuperKaramba apipavidalinimas</comment>
+ <comment xml:lang="nl">SuperKaramba-thema</comment>
+ <comment xml:lang="nn">SuperKaramba-tema</comment>
+ <comment xml:lang="pl">Wygląd SuperKaramba</comment>
+ <comment xml:lang="pt">Tema do SuperKaramba</comment>
+ <comment xml:lang="pt_BR">Tema do SuperKaramba</comment>
+ <comment xml:lang="ro">tematică SuperKaramba</comment>
+ <comment xml:lang="sl">Tema SuperKaramba</comment>
+ <comment xml:lang="sv">Superkaramba-tema</comment>
+ <comment xml:lang="tr">SuperKaramba teması</comment>
+ <comment xml:lang="uk">тема SuperKaramba</comment>
+ <comment xml:lang="vi">chủ đề SuperKaramba</comment>
+ <comment xml:lang="zh_CN">SuperKaramba 主题</comment>
+ <glob pattern="*.skz"/>
+ </mime-type>
+ <mime-type type="application/x-vnd.kde.plan">
+ <comment>Calligra Plan project management document</comment>
+ <comment xml:lang="ar">وثيقة إدارة مشاريع Calligra Plan</comment>
+ <comment xml:lang="az">Calligra Plan layihəsi darəetmə sənədi</comment>
+ <comment xml:lang="be">Дакумент кіравання праектам у Calligra Plan</comment>
+ <comment xml:lang="ca">Document per a la gestió de projectes del Calligra Plan</comment>
+ <comment xml:lang="cs">Dokument pro správu projektů Calligra Plan</comment>
+ <comment xml:lang="de">Calligra-Plan-Projektverwaltungdokument</comment>
+ <comment xml:lang="el">Έγγραφο διαχείρισης έργων Calligra Plan</comment>
+ <comment xml:lang="en_GB">Calligra Plan project management document</comment>
+ <comment xml:lang="es">Documento de gestión de proyecto de Calligra Plan</comment>
+ <comment xml:lang="eu">Calligra Plan-eko proiektuak kudeatzeko dokumentua</comment>
+ <comment xml:lang="fi">Calligra Plan -projektinhallintatiedosto</comment>
+ <comment xml:lang="fr">Document de gestion de projets pour Calligra Plan</comment>
+ <comment xml:lang="hi">कैलिग्रा प्लान परियोजना प्रबंधन दस्तावेज़ </comment>
+ <comment xml:lang="hu">Calligra Plan projektkezelő dokumentum</comment>
+ <comment xml:lang="ia">Calligra Plan: Documento de gestion de projecto</comment>
+ <comment xml:lang="it">Documento di gestione dei progetti di Calligra Plan</comment>
+ <comment xml:lang="ko">Caligra Plan 프로젝트 관리 문서</comment>
+ <comment xml:lang="lt">Calligra Plan projektų valdymo dokumentas</comment>
+ <comment xml:lang="nl">Calligra-plan projectbeheer-document</comment>
+ <comment xml:lang="nn">Prosjekthandsamingsdokument for Calligra Plan</comment>
+ <comment xml:lang="pl">Dokument zarządzania projektami w Calligra Plan</comment>
+ <comment xml:lang="pt">Documento de gestão de projectos do Plan para o Calligra</comment>
+ <comment xml:lang="pt_BR">Documento de gerenciamento de projetos do Calligra Plan</comment>
+ <comment xml:lang="ro">document management de proiect Calligra Plan</comment>
+ <comment xml:lang="sl">Dokument upravljanja projektov Calligra Plan</comment>
+ <comment xml:lang="sv">Calligra Plan-projekthanteringsdokument</comment>
+ <comment xml:lang="tr">Calligra Plan proje yönetimi belgesi</comment>
+ <comment xml:lang="uk">документ керування роботами Plan зі складу Calligra</comment>
+ <comment xml:lang="vi">tài liệu quản lí dự án Calligra Plan</comment>
+ <comment xml:lang="zh_CN">Calligra Plan 项目管理文档</comment>
+ <glob pattern="*.plan"/>
+ </mime-type>
+ <mime-type type="application/x-vnd.kde.plan.work">
+ <comment>Calligra Plan work package document</comment>
+ <comment xml:lang="ar">وثيقة حزمة عمل Calligra Plan</comment>
+ <comment xml:lang="az">Calligra Plan iş paketi sənədi</comment>
+ <comment xml:lang="be">Дакумент, які змяшчае пачак прац Calligra Plan</comment>
+ <comment xml:lang="ca">Document de paquet de treball del Calligra Plan</comment>
+ <comment xml:lang="cs">Dokument pracovního balíčku Calligra Plan</comment>
+ <comment xml:lang="de">Calligra-Plan-Arbeitspaketdokument</comment>
+ <comment xml:lang="el">Έγγραφο πακέτου εργασίας Calligra Plan</comment>
+ <comment xml:lang="en_GB">Calligra Plan work package document</comment>
+ <comment xml:lang="es">Documento de paquete de trabajo de Calligra Plan</comment>
+ <comment xml:lang="eu">Calligra Plan-eko lanerako pakete-dokumentua</comment>
+ <comment xml:lang="fi">Calligra Plan -työpakettitiedosto</comment>
+ <comment xml:lang="fr">Document de lots de travaux pour Calligra Plan</comment>
+ <comment xml:lang="hi">कॉलिग्रा प्लान कार्य पैकेज दस्तावेज़ </comment>
+ <comment xml:lang="hu">Calligra Plan munkacsomag dokumentum</comment>
+ <comment xml:lang="ia">Documento de pacchetto de labor de Calligra Plan</comment>
+ <comment xml:lang="it">Documento dei pacchetti di lavoro di Calligra Plan</comment>
+ <comment xml:lang="ko">Caligra Plan 작업 패키지 문서</comment>
+ <comment xml:lang="lt">Calligra Plan darbo paketo dokumentas</comment>
+ <comment xml:lang="nl">Calligra-plan werkpakket document</comment>
+ <comment xml:lang="nn">Arbeidspakkedokument for Calligra Plan</comment>
+ <comment xml:lang="pl">Dokument zawierający pakiet zadań Calligra Plan</comment>
+ <comment xml:lang="pt">Documento de pacote de trabalho do Plan para o Calligra</comment>
+ <comment xml:lang="pt_BR">Documento do pacote de trabalho do Calligra Plan</comment>
+ <comment xml:lang="ro">sarcină de lucru management de proiect Calligra Plan</comment>
+ <comment xml:lang="sl">Dokument delovnega paketa Calligra Plan</comment>
+ <comment xml:lang="sv">Calligra Plan-arbetspaketsdokument</comment>
+ <comment xml:lang="tr">Calligra Plan iş paketi belgesi</comment>
+ <comment xml:lang="uk">пакунок роботи Plan зі складу Calligra</comment>
+ <comment xml:lang="vi">tài liệu gói công việc Calligra Plan</comment>
+ <comment xml:lang="zh_CN">Calligra Plan 工作包文档</comment>
+ <glob pattern="*.planwork"/>
+ </mime-type>
+ <mime-type type="application/x-vnd.kde.kplato">
+ <comment>KPlato project management document</comment>
+ <comment xml:lang="ar">وثيقة إدارة مشاريع KPlato</comment>
+ <comment xml:lang="az">KPlato layihəsi idarəetmə sənədi</comment>
+ <comment xml:lang="be">Дакумент кіравання праектам у KPlato</comment>
+ <comment xml:lang="ca">Document per a la gestió de projectes del KPlato</comment>
+ <comment xml:lang="cs">Dokument řízení projektů v KPlato</comment>
+ <comment xml:lang="de">KPlato-Projektverwaltungs-Dokument</comment>
+ <comment xml:lang="el">Έγγραφα διαχείρισης έργων KPlato</comment>
+ <comment xml:lang="en_GB">KPlato project management document</comment>
+ <comment xml:lang="es">Documento de gestión de proyecto de KPlato</comment>
+ <comment xml:lang="eu">KPlato-ko proiektua kudeatzeko dokumentua</comment>
+ <comment xml:lang="fi">KPLato-projektinhallintatiedosto</comment>
+ <comment xml:lang="fr">Document de gestion de projets pour KPlato</comment>
+ <comment xml:lang="hi">के-प्लॅटो परियोजना प्रबंधन दस्तावेज़</comment>
+ <comment xml:lang="hu">KPlato projektkezelő dokumentum</comment>
+ <comment xml:lang="ia">KPlato: Documento de gestion de projecto</comment>
+ <comment xml:lang="it">Documento di gestione dei progetti di KPlato</comment>
+ <comment xml:lang="ko">KPlato 프로젝트 관리 문서</comment>
+ <comment xml:lang="lt">KPlato projektų valdymo dokumentas</comment>
+ <comment xml:lang="nl">KPlato projectbeheer-document</comment>
+ <comment xml:lang="nn">KPlato-prosjekthandsamingsdokument</comment>
+ <comment xml:lang="pl">Dokument zarządzania projektami w KPlato</comment>
+ <comment xml:lang="pt">Documento de gestão de projectos do KPlato</comment>
+ <comment xml:lang="pt_BR">Documento de gerenciamento de projetos do KPlato</comment>
+ <comment xml:lang="ro">document management de proiect KPlato</comment>
+ <comment xml:lang="sl">Dokument upravljanja projektov KPlato</comment>
+ <comment xml:lang="sv">Kplato-projekthantering dokument</comment>
+ <comment xml:lang="tr">KPlato proje yönetimi belgesi</comment>
+ <comment xml:lang="uk">документ керування роботами KPlato</comment>
+ <comment xml:lang="vi">tài liệu quản lí dự án KPlato</comment>
+ <comment xml:lang="zh_CN">KPlato 项目管理文档</comment>
+ <glob pattern="*.kplato"/>
+ </mime-type>
+ <mime-type type="application/x-vnd.kde.kplato.work">
+ <comment>KPlato project management work package</comment>
+ <comment xml:lang="ar">حزمة عمل إدارة مشاريع KPlato</comment>
+ <comment xml:lang="az">KPlato idarəetmə sənədi iş paketi</comment>
+ <comment xml:lang="be">Пачак прац кіравання праектамі KPlato</comment>
+ <comment xml:lang="ca">Paquet de treball per a la gestió de projectes del KPlato</comment>
+ <comment xml:lang="cs">Pracovní balíček řízení projektů v KPlato</comment>
+ <comment xml:lang="de">KPlato-Projektverwaltungs-Arbeitspaket</comment>
+ <comment xml:lang="el">Πακέτο εργασιών διαχείρισης έργων KPlato</comment>
+ <comment xml:lang="en_GB">KPlato project management work package</comment>
+ <comment xml:lang="es">Paquete de trabajo de gestión de proyecto de KPlato</comment>
+ <comment xml:lang="eu">KPlato-ko proiektuak kudeatzeko lan paketea</comment>
+ <comment xml:lang="fi">KPlato-projektinhallinnan työpaketti</comment>
+ <comment xml:lang="fr">Lots de travaux du logiciel de gestion de projets pour KPlato</comment>
+ <comment xml:lang="hi">के-प्लॅटो परियोजना प्रबंधन कार्य पैकेज</comment>
+ <comment xml:lang="hu">KPlato projektkezelő munkacsomag</comment>
+ <comment xml:lang="ia">KPlato: Pacchetto de travalio de gestion de projecto</comment>
+ <comment xml:lang="it">Pacchetto di lavoro di gestione dei progetti di KPlato</comment>
+ <comment xml:lang="ko">KPlato 프로젝트 관리 작업 패키지</comment>
+ <comment xml:lang="lt">KPlato projektų valdymo darbo paketas</comment>
+ <comment xml:lang="nl">KPlato projectbeheer-werkpakket</comment>
+ <comment xml:lang="nn">KPlato-prosjekthandsamingsarbeidspakke</comment>
+ <comment xml:lang="pl">Pakiet pracy dot. zarządzania projektami KPlato</comment>
+ <comment xml:lang="pt">Pacote de trabalho de gestão de projectos do KPlato</comment>
+ <comment xml:lang="pt_BR">Pacote de trabalho de gerenciamento de projetos do KPlato</comment>
+ <comment xml:lang="ro">pachet de lucru pentru management de proiect KPlato</comment>
+ <comment xml:lang="sl">Delovni paket upravljanja projektov KPlato</comment>
+ <comment xml:lang="sv">Kplato-projekthantering arbetspaket</comment>
+ <comment xml:lang="tr">KPlato proje yönetimi çalışma paketi</comment>
+ <comment xml:lang="uk">пакунок проєкту керування роботами KPlato</comment>
+ <comment xml:lang="vi">gói công việc quản lí dự án KPlato</comment>
+ <comment xml:lang="zh_CN">KPlato 项目管理工作包</comment>
+ <glob pattern="*.kplatowork"/>
+ </mime-type>
+ <mime-type type="application/x-vnd.kde.kugar.mixed">
+ <comment>Kugar archive</comment>
+ <comment xml:lang="ar">أرشيف Kugar</comment>
+ <comment xml:lang="az">Kugar arxivi</comment>
+ <comment xml:lang="be">Архіў Kugar</comment>
+ <comment xml:lang="ca">Arxiu del Kugar</comment>
+ <comment xml:lang="cs">Archiv Kugar</comment>
+ <comment xml:lang="de">Kugar-Archiv</comment>
+ <comment xml:lang="el">Αρχειοθήκη Kugar</comment>
+ <comment xml:lang="en_GB">Kugar archive</comment>
+ <comment xml:lang="es">Archivo de Kugar</comment>
+ <comment xml:lang="eu">Kugar-reko artxiboa</comment>
+ <comment xml:lang="fi">Kugar-arkisto</comment>
+ <comment xml:lang="fr">Archive pour Kugar</comment>
+ <comment xml:lang="hi">कूगर अभिलेखागार</comment>
+ <comment xml:lang="hu">Kugar-archívum</comment>
+ <comment xml:lang="ia">Kugar : archivo</comment>
+ <comment xml:lang="it">Archivio di Kugar</comment>
+ <comment xml:lang="ko">Kugar 압축 파일</comment>
+ <comment xml:lang="lt">Kugar archyvas</comment>
+ <comment xml:lang="nl">Kugar-archief</comment>
+ <comment xml:lang="nn">Kugar-arkiv</comment>
+ <comment xml:lang="pl">Archiwum Kugar</comment>
+ <comment xml:lang="pt">Pacote do Kugar</comment>
+ <comment xml:lang="pt_BR">Arquivo do Kugar</comment>
+ <comment xml:lang="ro">arhivă Kugar</comment>
+ <comment xml:lang="sl">Arhiv Kugar</comment>
+ <comment xml:lang="sv">Kugar-arkiv</comment>
+ <comment xml:lang="tr">Kugar arşivi</comment>
+ <comment xml:lang="uk">архів Kugar</comment>
+ <comment xml:lang="vi">kho trữ Kugar</comment>
+ <comment xml:lang="zh_CN">Kugar 存档文件</comment>
+ <glob pattern="*.kug"/>
+ </mime-type>
+ <mime-type type="application/x-webarchive">
+ <sub-class-of type="application/x-compressed-tar"/>
+ <comment>web archive</comment>
+ <comment xml:lang="ar">أرشيف ويب</comment>
+ <comment xml:lang="az">veb arxiv</comment>
+ <comment xml:lang="be">вэб-архіў</comment>
+ <comment xml:lang="ca">Arxiu web</comment>
+ <comment xml:lang="cs">webový archiv</comment>
+ <comment xml:lang="de">Web-Archiv</comment>
+ <comment xml:lang="el">Αρχειοθήκη ιστού</comment>
+ <comment xml:lang="en_GB">web archive</comment>
+ <comment xml:lang="es">archivo web</comment>
+ <comment xml:lang="eu">web-artxiboa</comment>
+ <comment xml:lang="fi">verkkoarkisto</comment>
+ <comment xml:lang="fr">Archive Internet</comment>
+ <comment xml:lang="hi">वेब अभिलेखागार</comment>
+ <comment xml:lang="hu">webes archívum</comment>
+ <comment xml:lang="ia">archivo web</comment>
+ <comment xml:lang="it">Archivio web</comment>
+ <comment xml:lang="ko">웹 압축 파일</comment>
+ <comment xml:lang="lt">saityno archyvas</comment>
+ <comment xml:lang="nl">webarchief</comment>
+ <comment xml:lang="nn">vevarkiv</comment>
+ <comment xml:lang="pl">archiwum sieciowe</comment>
+ <comment xml:lang="pt">pacote Web</comment>
+ <comment xml:lang="pt_BR">Arquivo Web</comment>
+ <comment xml:lang="ro">arhivă web</comment>
+ <comment xml:lang="sl">spletni arhiv</comment>
+ <comment xml:lang="sv">webbarkiv</comment>
+ <comment xml:lang="ta">இணைய காப்பகம்</comment>
+ <comment xml:lang="tr">web arşivi</comment>
+ <comment xml:lang="uk">вебархів</comment>
+ <comment xml:lang="vi">kho trữ web</comment>
+ <comment xml:lang="zh_CN">网页存档文件</comment>
+ <glob pattern="*.war"/>
+ </mime-type>
+ <mime-type type="application/xsd"> <!-- fdo s-m-i adds *.xsd to application/xml, i.e. no subclass. Good enough? This here creates a glob conflict... -->
+ <sub-class-of type="application/xml"/>
+ <comment>W3C XML schema</comment>
+ <comment xml:lang="ar">مخطط W3C XML</comment>
+ <comment xml:lang="az">W3C XML sxemi</comment>
+ <comment xml:lang="be">Схема XML W3C</comment>
+ <comment xml:lang="ca">Esquema XML de la W3C</comment>
+ <comment xml:lang="cs">W3C XML schéma</comment>
+ <comment xml:lang="de">W3C-XML-Schema</comment>
+ <comment xml:lang="el">Σχήμα W3C XML</comment>
+ <comment xml:lang="en_GB">W3C XML schema</comment>
+ <comment xml:lang="es">Esquema XML del W3C</comment>
+ <comment xml:lang="eu">W3C XML eskema</comment>
+ <comment xml:lang="fi">W3C XML -skeema</comment>
+ <comment xml:lang="fr">Schéma « XML W3C »</comment>
+ <comment xml:lang="hi">डब्ल्यू त्री सी एक्स एम एल स्कीमा</comment>
+ <comment xml:lang="hu">W3C XML-séma</comment>
+ <comment xml:lang="ia">schema XML de W3C</comment>
+ <comment xml:lang="it">Schema XML W3C</comment>
+ <comment xml:lang="ko">W3C XML 스키마</comment>
+ <comment xml:lang="lt">W3C XML schema</comment>
+ <comment xml:lang="nl">W3C XML-schema</comment>
+ <comment xml:lang="nn">W3C XML-skjema</comment>
+ <comment xml:lang="pl">Schemat W3C XML</comment>
+ <comment xml:lang="pt">Esquema XML da W3C</comment>
+ <comment xml:lang="pt_BR">Esquema XML da W3C</comment>
+ <comment xml:lang="ro">Schemă XML W3C</comment>
+ <comment xml:lang="sl">Shema W3C XML</comment>
+ <comment xml:lang="sv">W3C XML-schema</comment>
+ <comment xml:lang="tr">W3C XML şeması</comment>
+ <comment xml:lang="uk">схема XML W3C</comment>
+ <comment xml:lang="vi">sơ đồ XML W3C</comment>
+ <comment xml:lang="zh_CN">W3C XML 结构定义</comment>
+ <glob pattern="*.xsd"/>
+ </mime-type>
+ <mime-type type="audio/x-pn-realaudio-plugin"> <!-- Not a type of file, so will not go to shared-mime-info -->
+ <comment>RealAudio plugin file</comment>
+ <comment xml:lang="ar">ملف ملحق RealAudio</comment>
+ <comment xml:lang="az">RealAudio fayl genişləmnməsi</comment>
+ <comment xml:lang="be">Файл убудовы RealAudio</comment>
+ <comment xml:lang="ca">Fitxer de connector RealAudio</comment>
+ <comment xml:lang="cs">Soubor modulu RealAudio</comment>
+ <comment xml:lang="de">RealAudio-Moduldatei</comment>
+ <comment xml:lang="el">Αρχείο προσθέτου RealAudio</comment>
+ <comment xml:lang="en_GB">RealAudio plugin file</comment>
+ <comment xml:lang="es">Archivo de complemento RealAudio</comment>
+ <comment xml:lang="eu">RealAudio plugin-fitxategia</comment>
+ <comment xml:lang="fi">RealAudio-liitännäistiedosto</comment>
+ <comment xml:lang="fr">Fichier de module externe « Real-Audio »</comment>
+ <comment xml:lang="hi">रिअल-ऑडियो प्लगइन फ़ाइल</comment>
+ <comment xml:lang="hu">RealAudio-bővítményfájl</comment>
+ <comment xml:lang="ia">File de plugin de RealAudio</comment>
+ <comment xml:lang="it">File di estensioni RealAudio</comment>
+ <comment xml:lang="ko">RealAudio 플러그인 파일</comment>
+ <comment xml:lang="lt">RealAudio papildinio failas</comment>
+ <comment xml:lang="nl">RealAudio-bestand</comment>
+ <comment xml:lang="nn">RealAudio-programtilleggfil</comment>
+ <comment xml:lang="pl">Plik wtyczki RealAudio</comment>
+ <comment xml:lang="pt">Ficheiro de 'plugin' do RealAudio</comment>
+ <comment xml:lang="pt_BR">Arquivo de plugin do RealAudio</comment>
+ <comment xml:lang="ro">fișier cu extensie RealAudio</comment>
+ <comment xml:lang="sl">Datoteka vstavka RealAudio</comment>
+ <comment xml:lang="sv">Realaudio-insticksprogramfil</comment>
+ <comment xml:lang="tr">RealAudio eklenti dosyası</comment>
+ <comment xml:lang="uk">файл додатка RealAudio</comment>
+ <comment xml:lang="vi">tệp phần cài cắm RealAudio</comment>
+ <comment xml:lang="zh_CN">RealAudio 插件文件</comment>
+ </mime-type>
+ <mime-type type="application/vnd.kde.kphotoalbum-import"> <!-- fdo #12732 rejected, will stay KDE-specific -->
+ <comment>KPhotoAlbum import</comment>
+ <comment xml:lang="ar">استيراد KPhotoAlbum</comment>
+ <comment xml:lang="az">KPhotoAlbum fotoalbom arxivi</comment>
+ <comment xml:lang="be">Імпарт KPhotoAlbum</comment>
+ <comment xml:lang="ca">Importació del KPhotoAlbum</comment>
+ <comment xml:lang="cs">Import KPhotoAlbum</comment>
+ <comment xml:lang="de">KPhotoAlbum-Import</comment>
+ <comment xml:lang="el">Εισαγωγή KPhotoAlbum</comment>
+ <comment xml:lang="en_GB">KPhotoAlbum import</comment>
+ <comment xml:lang="es">Importación de KPhotoAlbum</comment>
+ <comment xml:lang="eu">KPhotoAlbum inportatzea</comment>
+ <comment xml:lang="fi">KPhotoAlbum-tuonti</comment>
+ <comment xml:lang="fr">Importation pour KPhotoAlbum</comment>
+ <comment xml:lang="hi">केफोटोआलबम आयात</comment>
+ <comment xml:lang="hu">KPhotoAlbum-import</comment>
+ <comment xml:lang="ia">Importation de KPhotoAlbum</comment>
+ <comment xml:lang="it">Importazione di KPhotoAlbum</comment>
+ <comment xml:lang="ko">KPhotoAlbum 가져오기</comment>
+ <comment xml:lang="lt">KPhotoAlbum importavimas</comment>
+ <comment xml:lang="nl">KPhotoAlbum-import</comment>
+ <comment xml:lang="nn">KPhotoAlbum-import</comment>
+ <comment xml:lang="pl">Import KPhotoAlbum</comment>
+ <comment xml:lang="pt">Importação do KPhotoAlbum</comment>
+ <comment xml:lang="pt_BR">Importação do KPhotoAlbum</comment>
+ <comment xml:lang="ro">import KPhotoAlbum</comment>
+ <comment xml:lang="sl">Uvoz v KPhotoAlbum</comment>
+ <comment xml:lang="sv">Kfotoalbum-import</comment>
+ <comment xml:lang="tr">KPhotoAlbum içeri aktarımı</comment>
+ <comment xml:lang="uk">файли імпортування KPhotoAlbum</comment>
+ <comment xml:lang="vi">phần nhập khẩu KPhotoAlbum</comment>
+ <comment xml:lang="zh_CN">KPhotoAlbum 导入文件</comment>
+ <glob pattern="*.kim"/>
+ </mime-type>
+ <mime-type type="image/x-hdr"> <!-- TODO fdo report -->
+ <comment>HDR image</comment>
+ <comment xml:lang="ar">صورة HDR</comment>
+ <comment xml:lang="az">HDR şəkili</comment>
+ <comment xml:lang="be">HDR-выява</comment>
+ <comment xml:lang="ca">Imatge HDR</comment>
+ <comment xml:lang="cs">HDR obrázek</comment>
+ <comment xml:lang="de">HDR-Bild</comment>
+ <comment xml:lang="el">Εικόνα HDR</comment>
+ <comment xml:lang="en_GB">HDR image</comment>
+ <comment xml:lang="es">Imagen HDR</comment>
+ <comment xml:lang="eu">HDR irudia</comment>
+ <comment xml:lang="fi">HDR-kuva</comment>
+ <comment xml:lang="fr">Image Haute définition « HDR »</comment>
+ <comment xml:lang="hi">एचडीआर छवि</comment>
+ <comment xml:lang="hu">HDR-kép</comment>
+ <comment xml:lang="ia">Imagine HDR</comment>
+ <comment xml:lang="it">Immagine HDR</comment>
+ <comment xml:lang="ko">HDR 그림</comment>
+ <comment xml:lang="lt">HDR paveikslas</comment>
+ <comment xml:lang="nl">HDR-image</comment>
+ <comment xml:lang="nn">HDR-bilete</comment>
+ <comment xml:lang="pl">Obraz HDR</comment>
+ <comment xml:lang="pt">Imagem HDR</comment>
+ <comment xml:lang="pt_BR">Imagem HDR</comment>
+ <comment xml:lang="ro">imagine HDR</comment>
+ <comment xml:lang="sl">Slika HDR</comment>
+ <comment xml:lang="sv">HDR-bild</comment>
+ <comment xml:lang="ta">HDR படம்</comment>
+ <comment xml:lang="tr">HDR resmi</comment>
+ <comment xml:lang="uk">зображення HDR</comment>
+ <comment xml:lang="vi">ảnh HDR</comment>
+ <comment xml:lang="zh_CN">HDR 图像</comment>
+ <acronym>HDR</acronym>
+ <expanded-acronym>High Dynamic Range</expanded-acronym>
+ <glob pattern="*.hdr"/>
+ <glob pattern="*.pic"/>
+ </mime-type>
+ <mime-type type="image/x-kde-raw">
+ <sub-class-of type="image/x-dcraw"/>
+ <comment>KDE raw image formats</comment>
+ <comment xml:lang="ar">تنسيقات صورة خامة لكدي</comment>
+ <comment xml:lang="az">KDE raw şəkil formatı</comment>
+ <comment xml:lang="be">Неапрацаваныя фарматы выяваў у KD</comment>
+ <comment xml:lang="ca">Formats d'imatge RAW del KDE</comment>
+ <comment xml:lang="cs">Formáty obrázků raw v KDE</comment>
+ <comment xml:lang="de">KDE-Roh-Bildformate</comment>
+ <comment xml:lang="el">Τύποι ακατέργαστων τύπων εικόνας του KDE</comment>
+ <comment xml:lang="en_GB">KDE raw image formats</comment>
+ <comment xml:lang="es">Formatos de imagen en bruto de KDE</comment>
+ <comment xml:lang="eu">KDE-ren RAW irudi formatuak</comment>
+ <comment xml:lang="fi">KDE-raakakuvamuoto</comment>
+ <comment xml:lang="fr">Formats d'image « raw » pour KDE</comment>
+ <comment xml:lang="hi">केडीई रॉ छवि प्रारूप</comment>
+ <comment xml:lang="hu">KDE-s nyers képformátumok</comment>
+ <comment xml:lang="ia">Formatos de imagines crude de KDE</comment>
+ <comment xml:lang="it">Formati di immagine raw di KDE</comment>
+ <comment xml:lang="ko">KDE RAW 그림 형식</comment>
+ <comment xml:lang="lt">KDE neapdorotų paveikslų formatai</comment>
+ <comment xml:lang="nl">KDE-rawimage-formats</comment>
+ <comment xml:lang="nn">KDE-råbilete</comment>
+ <comment xml:lang="pl">Formaty nieprzetworzonych obrazów w KDE</comment>
+ <comment xml:lang="pt">Formatos de imagem em bruto do KDE</comment>
+ <comment xml:lang="pt_BR">Formatos de imagem RAW do KDE</comment>
+ <comment xml:lang="ro">formate de imagine brute KDE</comment>
+ <comment xml:lang="sl">KDE surovi formati slik</comment>
+ <comment xml:lang="sv">KDE-obehandlade bildformat</comment>
+ <comment xml:lang="tr">KDE ham resim biçimleri</comment>
+ <comment xml:lang="uk">формати цифрових негативів KDE</comment>
+ <comment xml:lang="vi">các dạng thức ảnh thô ở KDE</comment>
+ <comment xml:lang="zh_CN">KDE RAW 图像格式</comment>
+ <glob pattern="*.bay"/>
+ <glob pattern="*.bmq"/>
+ <glob pattern="*.cs1"/>
+ <glob pattern="*.cs2"/>
+ <glob pattern="*.erf"/>
+ <glob pattern="*.fff"/>
+ <glob pattern="*.hrd"/>
+ <glob pattern="*.mdc"/>
+ <glob pattern="*.mos"/>
+ <glob pattern="*.pnx"/>
+ <glob pattern="*.rdc"/>
+ </mime-type>
+ <mime-type type="text/plain"> <!-- As discussed on xdg list, *.doc is needed here for disambiguation -->
+ <glob pattern="*.doc"/>
+ </mime-type>
+ <mime-type type="text/x-hex">
+ <sub-class-of type="text/plain"/>
+ <comment>Intel® hexadecimal object file</comment>
+ <comment xml:lang="ar">ملف كائن سداسي عشر Intel®</comment>
+ <comment xml:lang="az">Intel® HEX faylı</comment>
+ <comment xml:lang="be">Шаснаццатковы файл аб'екта Intel®</comment>
+ <comment xml:lang="ca">Fitxer objecte hexadecimal d'Intel®</comment>
+ <comment xml:lang="cs">Intel® hexadecimální objektový soubor</comment>
+ <comment xml:lang="de">Intel®-Hexadezimal-Objektdatei</comment>
+ <comment xml:lang="el">Δεκαεξαδικό μεταφρασμένο αρχείο Intel®</comment>
+ <comment xml:lang="en_GB">Intel® hexadecimal object file</comment>
+ <comment xml:lang="es">Archivo de código objeto hexadecimal de Intel®</comment>
+ <comment xml:lang="eu">Intel®-en objektu hamaseitarreko fitxategia</comment>
+ <comment xml:lang="fi">Intelin heksadesimaalinen objektitiedosto</comment>
+ <comment xml:lang="fr">Fichier objet hexadécimal « Intel® »</comment>
+ <comment xml:lang="hi">इंटेल® षोडश आधारी ऑब्जैक्ट फ़ाइल</comment>
+ <comment xml:lang="hu">Intel®-féle hexadecimális objektumfájl</comment>
+ <comment xml:lang="ia">File objecto hexadecimal de Intel(c)</comment>
+ <comment xml:lang="it">File oggetto esadecimale Intel®</comment>
+ <comment xml:lang="ko">Intel® 16진수 개체 파일</comment>
+ <comment xml:lang="lt">Intel® šešioliktainio objekto failas</comment>
+ <comment xml:lang="nl">Intel® hexadecimaal objectbestand</comment>
+ <comment xml:lang="nn">Intel®-heksobjektfil</comment>
+ <comment xml:lang="pl">Szesnastkowy plik obiektowy Intel®</comment>
+ <comment xml:lang="pt">Ficheiro-objecto em hexadecimal da Intel®</comment>
+ <comment xml:lang="pt_BR">Arquivo objeto em hexadecimal da Intel®</comment>
+ <comment xml:lang="ro">fișier cu obiect hexazecimal Intel®</comment>
+ <comment xml:lang="sl">Intel® šestnajstiška predmetna datoteka</comment>
+ <comment xml:lang="sv">Intel® hexadecimal objektfil</comment>
+ <comment xml:lang="tr">Intel® onaltılık nesne dosyası</comment>
+ <comment xml:lang="uk">шістнадцятковий об'єктний файл Intel®</comment>
+ <comment xml:lang="vi">tệp đối tượng thập lục phân Intel®</comment>
+ <comment xml:lang="zh_CN">Intel® 十六进制对象文件</comment>
+ <glob pattern="*.hex"/>
+ </mime-type>
+ <mime-type type="text/x-katefilelist">
+ <sub-class-of type="text/plain"/>
+ <comment>Kate file list loader plugin list</comment>
+ <comment xml:lang="ar">قائمة ملحقات محملات قائمة ملفات لكيت</comment>
+ <comment xml:lang="az">Kate fayllar siyahısı yükləyici qoşması</comment>
+ <comment xml:lang="be">Спіс убудоў загрузчыка файлаў Kate</comment>
+ <comment xml:lang="ca">Llista de connector carregador de la llista de fitxers del Kate</comment>
+ <comment xml:lang="de">Kate-Dateilisten-Modul</comment>
+ <comment xml:lang="el">Λίστα αρχείου φόρτωσης λίστας πρόσθετων Kate</comment>
+ <comment xml:lang="en_GB">Kate file list loader plugin list</comment>
+ <comment xml:lang="es">Lista de complementos de carga de listas de archivos de Kate</comment>
+ <comment xml:lang="eu">Kate-ko fitxategi-zerrenda zamatzeko plugin zerrenda</comment>
+ <comment xml:lang="fi">Kate-tiedostoluettelon latausliitännäisen luettelo</comment>
+ <comment xml:lang="fr">Liste de modules externes pour le chargeur de liste de fichiers pour Kate</comment>
+ <comment xml:lang="hi">केट फ़ाइल सूची लोडर प्लगइन सूची</comment>
+ <comment xml:lang="hu">Kate-listafájl (fájllista vagy bővítménylista)</comment>
+ <comment xml:lang="ia">Kate: Lista de plugin de cargator de lista de file</comment>
+ <comment xml:lang="it">Elenco delle estensioni del caricatore di elenchi di file di Kate</comment>
+ <comment xml:lang="ko">Kate 파일 목록 로더 플러그인 목록</comment>
+ <comment xml:lang="lt">Kate failų sąrašo įkėliklio papildinių sąrašas</comment>
+ <comment xml:lang="nl">Kate bestandenlijstlader voor pluginlijst</comment>
+ <comment xml:lang="nn">Programtilleggliste for filliste-lastar i Kate</comment>
+ <comment xml:lang="pl">Lista wtyczki do wczytywania plików Kate</comment>
+ <comment xml:lang="pt">Lista de 'plugins' de carregamento de listas de ficheiros do Kate</comment>
+ <comment xml:lang="pt_BR">Lista de plugins de carregamento de listas de arquivos do Kate</comment>
+ <comment xml:lang="ro">listă cu extensii pentru încărcător de liste de fișiere Kate</comment>
+ <comment xml:lang="sl">Seznam vstavka nalagalnika seznamov datotek za Kate</comment>
+ <comment xml:lang="sv">Kate insticksprogramlista för laddning av fillistor</comment>
+ <comment xml:lang="tr">Kate dosya listesi yükleyici eklentisi listesi</comment>
+ <comment xml:lang="uk">список файлів Kate</comment>
+ <comment xml:lang="vi">danh sách của phần cài cắm "Bộ tải danh sách tệp" trong Kate</comment>
+ <comment xml:lang="zh_CN">Kate 文件列表加载器插件列表</comment>
+ <glob pattern="*.katefl"/>
+ </mime-type>
+ <mime-type type="text/vnd.abc"> <!-- fdo #6578, needs update -->
+ <sub-class-of type="text/plain"/>
+ <comment>abc musical notation file</comment>
+ <comment xml:lang="ar">ملف كراسة موسيقية abc</comment>
+ <comment xml:lang="az">abc not yazısı</comment>
+ <comment xml:lang="be">файл нот abc</comment>
+ <comment xml:lang="ca">Fitxer de notació musical abc</comment>
+ <comment xml:lang="cs">Soubor hudební notace abc</comment>
+ <comment xml:lang="de">abc-Musik-Notationsdatei</comment>
+ <comment xml:lang="el">Αρχείο μουσικών συμβόλων abc</comment>
+ <comment xml:lang="en_GB">abc musical notation file</comment>
+ <comment xml:lang="es">Archivo de notación musical abc</comment>
+ <comment xml:lang="eu">abc-ko musika-notazio fitxategia</comment>
+ <comment xml:lang="fi">abc-musiikkinuottikirjoitustiedosto</comment>
+ <comment xml:lang="fr">Fichier de notation musicale « ABC »</comment>
+ <comment xml:lang="hi">एबीसी संगीत संकेतन फ़ाइल </comment>
+ <comment xml:lang="hu">Abc-kottafájl</comment>
+ <comment xml:lang="ia">file de notation musical abc</comment>
+ <comment xml:lang="it">File di notazione musicale abc</comment>
+ <comment xml:lang="ko">abc 악보 파일</comment>
+ <comment xml:lang="lt">abc muzikos natų failas</comment>
+ <comment xml:lang="nl">abc-muzieknotatiebestand</comment>
+ <comment xml:lang="nn">abc-musikknotasjonsfil</comment>
+ <comment xml:lang="pl">plik zapisu muzyki abc</comment>
+ <comment xml:lang="pt">Ficheiro de notação musical do 'abc'</comment>
+ <comment xml:lang="pt_BR">arquivo de notação musical do abc</comment>
+ <comment xml:lang="ro">fișier cu notație muzicală abc</comment>
+ <comment xml:lang="sl">Datoteka glasbenega zapisa abc</comment>
+ <comment xml:lang="sv">abc-musiknotationsfil</comment>
+ <comment xml:lang="ta">abc பாடல் குறிப்பு கோப்பு</comment>
+ <comment xml:lang="tr">abc müzik notalama dosyası</comment>
+ <comment xml:lang="uk">файл нотного стану abc</comment>
+ <comment xml:lang="vi">tệp kí hiệu âm nhạc abc</comment>
+ <comment xml:lang="zh_CN">abc 乐谱文件</comment>
+ <magic priority="80">
+ <match type="string" value="%abc" offset="0"/>
+ </magic>
+ <glob pattern="*.abc"/>
+ </mime-type>
+
+ <mime-type type="application/vnd.kde.fontspackage">
+ <sub-class-of type="application/zip"/>
+ <comment>fonts package</comment>
+ <comment xml:lang="ar">حزمة خطوط</comment>
+ <comment xml:lang="az">şrift paketi</comment>
+ <comment xml:lang="be">пачак шрыфтоў</comment>
+ <comment xml:lang="ca">Paquet de tipus de lletra</comment>
+ <comment xml:lang="cs">balíček písem</comment>
+ <comment xml:lang="de">Schriftartenpaket</comment>
+ <comment xml:lang="el">πακέτο γραμματοσειρών</comment>
+ <comment xml:lang="en_GB">fonts package</comment>
+ <comment xml:lang="es">paquete de tipos de letra</comment>
+ <comment xml:lang="eu">letra-tipoen paketea</comment>
+ <comment xml:lang="fi">fonttipaketti</comment>
+ <comment xml:lang="fr">Paquet de fontes de caractères</comment>
+ <comment xml:lang="hi">फोंट पैकेज</comment>
+ <comment xml:lang="hu">betűtípuscsomag</comment>
+ <comment xml:lang="ia">pacchettos de fonts</comment>
+ <comment xml:lang="it">Pacchetto di caratteri</comment>
+ <comment xml:lang="ko">글꼴 패키지</comment>
+ <comment xml:lang="lt">šriftų paketas</comment>
+ <comment xml:lang="nl">lettertypenpakket</comment>
+ <comment xml:lang="nn">skriftpakke</comment>
+ <comment xml:lang="pl">zestaw czcionek</comment>
+ <comment xml:lang="pt">pacote de tipos de letra</comment>
+ <comment xml:lang="pt_BR">pacote de fontes</comment>
+ <comment xml:lang="ro">pachet de fonturi</comment>
+ <comment xml:lang="sl">paket pisav</comment>
+ <comment xml:lang="sv">teckensnittspaket</comment>
+ <comment xml:lang="ta">எழுத்துரு தொகுப்பு</comment>
+ <comment xml:lang="tr">yazı tipi paketi</comment>
+ <comment xml:lang="uk">пакунок шрифтів</comment>
+ <comment xml:lang="vi">gói phông chữ</comment>
+ <comment xml:lang="zh_CN">字体包</comment>
+ <glob pattern="*.fonts.zip"/>
+ </mime-type>
+
+ <mime-type type="application/x-smb-server"> <!-- KDE-specific -->
+ <sub-class-of type="inode/directory"/>
+ <comment>Windows server</comment>
+ <comment xml:lang="ar">خادم ويندوز</comment>
+ <comment xml:lang="az">Windows serveri</comment>
+ <comment xml:lang="be">Сервер Windows</comment>
+ <comment xml:lang="ca">Servidor de Windows</comment>
+ <comment xml:lang="cs">Windows server</comment>
+ <comment xml:lang="de">Windows-Server</comment>
+ <comment xml:lang="el">Εξυπηρετητής Windows</comment>
+ <comment xml:lang="en_GB">Windows server</comment>
+ <comment xml:lang="es">Servidor de Windows</comment>
+ <comment xml:lang="eu">Windows zerbitzaria</comment>
+ <comment xml:lang="fi">Windows-palvelin</comment>
+ <comment xml:lang="fr">Serveur Windows</comment>
+ <comment xml:lang="hi">विंडोज़ सरवर</comment>
+ <comment xml:lang="hu">Windows-kiszolgáló</comment>
+ <comment xml:lang="ia">Servitor de Windows</comment>
+ <comment xml:lang="it">Server Windows</comment>
+ <comment xml:lang="ko">Windows 서버</comment>
+ <comment xml:lang="lt">Windows serveris</comment>
+ <comment xml:lang="nl">Windows-server</comment>
+ <comment xml:lang="nn">Windows-tenar</comment>
+ <comment xml:lang="pl">Serwer Windowsa</comment>
+ <comment xml:lang="pt">Servidor do Windows</comment>
+ <comment xml:lang="pt_BR">Servidor do Windows</comment>
+ <comment xml:lang="ro">server Windows</comment>
+ <comment xml:lang="sl">Strežnik Windows</comment>
+ <comment xml:lang="sv">Windows-server</comment>
+ <comment xml:lang="ta">விண்டோஸ் சேவையகம்</comment>
+ <comment xml:lang="tr">Windows sunucusu</comment>
+ <comment xml:lang="uk">сервер Windows</comment>
+ <comment xml:lang="vi">máy chủ Windows</comment>
+ <comment xml:lang="zh_CN">Windows 服务器</comment>
+ </mime-type>
+ <mime-type type="application/x-smb-workgroup"> <!-- KDE-specific -->
+ <sub-class-of type="inode/directory"/>
+ <comment>Windows workgroup</comment>
+ <comment xml:lang="ar">مجموعة عمل ويندوز</comment>
+ <comment xml:lang="az">Windows iş qrupu</comment>
+ <comment xml:lang="be">Рабочая група Windows</comment>
+ <comment xml:lang="ca">Treball en grup de Windows</comment>
+ <comment xml:lang="cs">Pracovní skupina Windows</comment>
+ <comment xml:lang="de">Windows-Arbeitsgruppe</comment>
+ <comment xml:lang="el">Ομάδα εργασίας Windows</comment>
+ <comment xml:lang="en_GB">Windows workgroup</comment>
+ <comment xml:lang="es">Grupo de trabajo de Windows</comment>
+ <comment xml:lang="eu">Windows lantaldea</comment>
+ <comment xml:lang="fi">Windows-työryhmä</comment>
+ <comment xml:lang="fr">Groupe de travail Windows</comment>
+ <comment xml:lang="hi">विंडोज़ वर्कग्रुप</comment>
+ <comment xml:lang="hu">Windows munkacsoport</comment>
+ <comment xml:lang="ia">Gruppo de travalio de Windows</comment>
+ <comment xml:lang="it">Gruppo di lavoro di Windows</comment>
+ <comment xml:lang="ko">Windows 작업 그룹</comment>
+ <comment xml:lang="lt">Windows darbo grupė</comment>
+ <comment xml:lang="nl">Windows-werkgroep</comment>
+ <comment xml:lang="nn">Windows-arbeidsgruppe</comment>
+ <comment xml:lang="pl">Grupa robocza Windows</comment>
+ <comment xml:lang="pt">Grupo de trabalho do Windows</comment>
+ <comment xml:lang="pt_BR">Grupo de trabalho do Windows</comment>
+ <comment xml:lang="ro">grup de lucru Windows</comment>
+ <comment xml:lang="sl">Delovna skupina Windows</comment>
+ <comment xml:lang="sv">Windows-arbetsgrupp</comment>
+ <comment xml:lang="ta">விண்டோஸ் பணிக்குழு</comment>
+ <comment xml:lang="tr">Windows çalışma grubu</comment>
+ <comment xml:lang="uk">робоча група Windows</comment>
+ <comment xml:lang="vi">nhóm làm việc Windows</comment>
+ <comment xml:lang="zh_CN">Windows 工作组</comment>
+ </mime-type>
+ <mime-type type="application/x-ksysguard">
+ <!-- <sub-class-of type="application/xml"/> -->
+ <comment>KDE system monitor</comment>
+ <comment xml:lang="ar">نظام مراقبة كدي</comment>
+ <comment xml:lang="az">KDE sistem izləyicisi</comment>
+ <comment xml:lang="be">Сістэмны манітор KDE</comment>
+ <comment xml:lang="ca">Monitor del sistema del KDE</comment>
+ <comment xml:lang="cs">Monitor systému pro KDE</comment>
+ <comment xml:lang="de">KDE-Systemüberwachung</comment>
+ <comment xml:lang="el">Επόπτης συστήματος του KDE</comment>
+ <comment xml:lang="en_GB">KDE system monitor</comment>
+ <comment xml:lang="es">Monitor del sistema de KDE</comment>
+ <comment xml:lang="eu">KDE-ren sistemako begiralea</comment>
+ <comment xml:lang="fi">KDE:n järjestelmänvalvonta</comment>
+ <comment xml:lang="fr">Moniteur système pour KDE</comment>
+ <comment xml:lang="hi">केडीई तंत्र मॉनीटर</comment>
+ <comment xml:lang="hu">KDE rendszermonitor</comment>
+ <comment xml:lang="ia">Monitor de Systema de KDE</comment>
+ <comment xml:lang="it">Monitor di sistema di KDE</comment>
+ <comment xml:lang="ko">KDE 시스템 모니터</comment>
+ <comment xml:lang="lt">KDE sistemos prižiūryklė</comment>
+ <comment xml:lang="nl">KDE systeembewaking</comment>
+ <comment xml:lang="nn">KDE-systemovervaking</comment>
+ <comment xml:lang="pl">Monitor systemowy KDE</comment>
+ <comment xml:lang="pt">Monitor do sistema KDE</comment>
+ <comment xml:lang="pt_BR">Monitor do sistema do KDE</comment>
+ <comment xml:lang="ro">monitor de sistem KDE</comment>
+ <comment xml:lang="sl">Sistemski nadzornik KDE</comment>
+ <comment xml:lang="sv">KDE-systemövervakare</comment>
+ <comment xml:lang="ta">கே.டீ.யீ. கணினி மேற்பார்வை</comment>
+ <comment xml:lang="tr">KDE sistem izleyici</comment>
+ <comment xml:lang="uk">монітор системи KDE</comment>
+ <comment xml:lang="vi">trình giám sát hệ thống KDE</comment>
+ <comment xml:lang="zh_CN">KDE 系统监视器</comment>
+ <glob pattern="*.sgrd"/>
+ </mime-type>
+ <mime-type type="application/x-ktheme">
+ <sub-class-of type="application/zip"/>
+ <comment>KDE theme</comment>
+ <comment xml:lang="ar">سمة كدي</comment>
+ <comment xml:lang="az">KDE mövzusu</comment>
+ <comment xml:lang="be">Тэма KDE</comment>
+ <comment xml:lang="ca">Tema del KDE</comment>
+ <comment xml:lang="cs">Motiv KDE</comment>
+ <comment xml:lang="de">KDE-Design</comment>
+ <comment xml:lang="el">Θέμα του KDE</comment>
+ <comment xml:lang="en_GB">KDE theme</comment>
+ <comment xml:lang="es">Tema de KDE</comment>
+ <comment xml:lang="eu">KDE-ren gaia</comment>
+ <comment xml:lang="fi">KDE-teema</comment>
+ <comment xml:lang="fr">Thème de KDE</comment>
+ <comment xml:lang="hi">केडीई स्वरूपण</comment>
+ <comment xml:lang="hu">KDE téma</comment>
+ <comment xml:lang="ia">Thema de KDE</comment>
+ <comment xml:lang="it">Tema di KDE</comment>
+ <comment xml:lang="ko">KDE 테마</comment>
+ <comment xml:lang="lt">KDE apipavidalinimas</comment>
+ <comment xml:lang="nl">KDE-thema</comment>
+ <comment xml:lang="nn">KDE-tema</comment>
+ <comment xml:lang="pl">Wygląd KDE</comment>
+ <comment xml:lang="pt">Tema do KDE</comment>
+ <comment xml:lang="pt_BR">Tema do KDE</comment>
+ <comment xml:lang="ro">tematică KDE</comment>
+ <comment xml:lang="sl">Tema KDE</comment>
+ <comment xml:lang="sv">KDE-tema</comment>
+ <comment xml:lang="ta">கே.டீ.யீ. திட்டமுறை</comment>
+ <comment xml:lang="tr">KDE teması</comment>
+ <comment xml:lang="uk">тема KDE</comment>
+ <comment xml:lang="vi">chủ đề KDE</comment>
+ <comment xml:lang="zh_CN">KDE 主题</comment>
+ <glob pattern="*.kth"/>
+ </mime-type>
+
+ <mime-type type="application/x-quanta">
+ <sub-class-of type="text/plain"/>
+ <comment>Quanta project</comment>
+ <comment xml:lang="ar">مشروع Quanta</comment>
+ <comment xml:lang="az">Quanta layihəsi</comment>
+ <comment xml:lang="be">Праект Quanta</comment>
+ <comment xml:lang="ca">Projecte del Quanta</comment>
+ <comment xml:lang="cs">Projekt Quanta</comment>
+ <comment xml:lang="de">Quanta-Projekt</comment>
+ <comment xml:lang="el">Έργο Quanta</comment>
+ <comment xml:lang="en_GB">Quanta project</comment>
+ <comment xml:lang="es">Proyecto de Quanta</comment>
+ <comment xml:lang="eu">Quanta-ko proiektua</comment>
+ <comment xml:lang="fi">Quanta-projekti</comment>
+ <comment xml:lang="fr">Projet pour Quanta</comment>
+ <comment xml:lang="hi">क्वांटा परियोजना</comment>
+ <comment xml:lang="hu">Quanta-projekt</comment>
+ <comment xml:lang="ia">Quanta : Projecto</comment>
+ <comment xml:lang="it">Progetto Quanta</comment>
+ <comment xml:lang="ko">Quanta 프로젝트</comment>
+ <comment xml:lang="lt">Quanta projektas</comment>
+ <comment xml:lang="nl">Quanta-project</comment>
+ <comment xml:lang="nn">Quanta-prosjekt</comment>
+ <comment xml:lang="pl">Projekt Quanta</comment>
+ <comment xml:lang="pt">Projecto do Quanta</comment>
+ <comment xml:lang="pt_BR">Projeto do Quanta</comment>
+ <comment xml:lang="ro">proiect Quanta</comment>
+ <comment xml:lang="sl">Projekt Quanta</comment>
+ <comment xml:lang="sv">Quanta-projekt</comment>
+ <comment xml:lang="tr">Quanta projesi</comment>
+ <comment xml:lang="uk">проєкт Quanta</comment>
+ <comment xml:lang="vi">dự án Quanta</comment>
+ <comment xml:lang="zh_CN">Quanta 工程</comment>
+ <glob pattern="*.quanta"/>
+ </mime-type>
+ <mime-type type="application/x-kommander">
+ <sub-class-of type="text/plain"/>
+ <comment>Kommander file</comment>
+ <comment xml:lang="ar">ملف Kommander</comment>
+ <comment xml:lang="az">Kommander faylı</comment>
+ <comment xml:lang="be">Файл Kommander</comment>
+ <comment xml:lang="ca">Fitxer del Kommander</comment>
+ <comment xml:lang="cs">Soubor Kommanderu</comment>
+ <comment xml:lang="de">Kommander-Datei</comment>
+ <comment xml:lang="el">Αρχείο Kommander</comment>
+ <comment xml:lang="en_GB">Kommander file</comment>
+ <comment xml:lang="es">Archivo de Kommander</comment>
+ <comment xml:lang="eu">Kommander-reko fitxategia</comment>
+ <comment xml:lang="fi">Kommander-tiedosto</comment>
+ <comment xml:lang="fr">Fichier pour Kommander</comment>
+ <comment xml:lang="hi">कमांडर फ़ाइल</comment>
+ <comment xml:lang="hu">Kommander-fájl</comment>
+ <comment xml:lang="ia">Kommander : file</comment>
+ <comment xml:lang="it">File di Kommander</comment>
+ <comment xml:lang="ko">Kommander 파일</comment>
+ <comment xml:lang="lt">Kommander failas</comment>
+ <comment xml:lang="nl">Kommander-bestand</comment>
+ <comment xml:lang="nn">Kommander-fil</comment>
+ <comment xml:lang="pl">Plik Kommander</comment>
+ <comment xml:lang="pt">Ficheiro do Kommander</comment>
+ <comment xml:lang="pt_BR">Arquivo do Kommander</comment>
+ <comment xml:lang="ro">fișier Kommander</comment>
+ <comment xml:lang="sl">Datoteka Kommanderja</comment>
+ <comment xml:lang="sv">Kommander-fil</comment>
+ <comment xml:lang="ta">Kommander கோப்பு</comment>
+ <comment xml:lang="tr">Kommander dosyası</comment>
+ <comment xml:lang="uk">файл Kommander</comment>
+ <comment xml:lang="vi">tệp Kommander</comment>
+ <comment xml:lang="zh_CN">Kommander 文件</comment>
+ <glob pattern="*.kmdr"/>
+ </mime-type>
+
+ <mime-type type="application/x-tuberling">
+ <comment>potato</comment>
+ <comment xml:lang="ar">بطاطا</comment>
+ <comment xml:lang="az">kartof oğlan</comment>
+ <comment xml:lang="be">бульба</comment>
+ <comment xml:lang="ca">Patata</comment>
+ <comment xml:lang="cs">brambora</comment>
+ <comment xml:lang="de">potato</comment>
+ <comment xml:lang="el">πατάτα</comment>
+ <comment xml:lang="en_GB">potato</comment>
+ <comment xml:lang="es">potato</comment>
+ <comment xml:lang="eu">potato</comment>
+ <comment xml:lang="fi">peruna</comment>
+ <comment xml:lang="fr">patate</comment>
+ <comment xml:lang="hi">आलू का खेल</comment>
+ <comment xml:lang="hu">potato</comment>
+ <comment xml:lang="ia">patata</comment>
+ <comment xml:lang="it">patata</comment>
+ <comment xml:lang="ko">potato</comment>
+ <comment xml:lang="lt">bulvė</comment>
+ <comment xml:lang="nl">aardappel</comment>
+ <comment xml:lang="nn">potato</comment>
+ <comment xml:lang="pl">ziemniak</comment>
+ <comment xml:lang="pt">batata</comment>
+ <comment xml:lang="pt_BR">batata</comment>
+ <comment xml:lang="ro">cartof</comment>
+ <comment xml:lang="sl">krompirček</comment>
+ <comment xml:lang="sv">potatis</comment>
+ <comment xml:lang="ta">உருளைக்கிழங்கு</comment>
+ <comment xml:lang="tr">patates</comment>
+ <comment xml:lang="uk">картопля</comment>
+ <comment xml:lang="vi">potato</comment>
+ <comment xml:lang="zh_CN">potato 文件</comment>
+ <glob pattern="*.tuberling"/>
+ </mime-type>
+ <mime-type type="application/x-kolf">
+ <comment>Kolf saved game</comment>
+ <comment xml:lang="ar">لعبة Kolf محفوظة</comment>
+ <comment xml:lang="az">Kolf saxlanılan oyunu</comment>
+ <comment xml:lang="be">Захаваная гульня Kolf</comment>
+ <comment xml:lang="ca">Joc desat del Kolf</comment>
+ <comment xml:lang="cs">Uložená hra Kolf</comment>
+ <comment xml:lang="de">Kolf – gespeichertes Spiel</comment>
+ <comment xml:lang="el">Αποθηκευμένο παιχνίδι Kolf</comment>
+ <comment xml:lang="en_GB">Kolf saved game</comment>
+ <comment xml:lang="es">Juego guardado de Kolf</comment>
+ <comment xml:lang="eu">Kolf-en gordetako jokoa</comment>
+ <comment xml:lang="fi">Tallennettu Kolf-peli</comment>
+ <comment xml:lang="fr">Partie enregistrée pour Kolf </comment>
+ <comment xml:lang="hi">कोल्फ का सहेजा गया खेल</comment>
+ <comment xml:lang="hu">Kolf mentett állás</comment>
+ <comment xml:lang="ia">Joco salveguardate de Kolf</comment>
+ <comment xml:lang="it">Partita salvata di Kolf</comment>
+ <comment xml:lang="ko">Kolf 저장된 게임</comment>
+ <comment xml:lang="lt">Kolf įrašytas žaidimas</comment>
+ <comment xml:lang="nl">Opgeslagen Kolf-spel</comment>
+ <comment xml:lang="nn">Lagra Kolf-runde</comment>
+ <comment xml:lang="pl">Zapisana gra Kolfa</comment>
+ <comment xml:lang="pt">Jogo gravado do Kolf</comment>
+ <comment xml:lang="pt_BR">Jogo salvo do Kolf</comment>
+ <comment xml:lang="ro">joc salvat Kolf</comment>
+ <comment xml:lang="sl">Shranjena igra Kolf</comment>
+ <comment xml:lang="sv">Kolf sparat spel</comment>
+ <comment xml:lang="ta">Kolf சேமிக்கப்பட்ட ஆட்டம்</comment>
+ <comment xml:lang="tr">Kolf kaydedilmiş oyunu</comment>
+ <comment xml:lang="uk">збережена гра Kolf</comment>
+ <comment xml:lang="vi">bàn chơi Kolf đã lưu</comment>
+ <comment xml:lang="zh_CN">Kolf 游戏存档</comment>
+ <magic priority="80">
+ <match offset="0" type="string" value="[0 Saved Game]" />
+ </magic>
+ <glob pattern="*.kolfgame"/>
+ </mime-type>
+ <mime-type type="application/x-kourse">
+ <comment>Kolf course</comment>
+ <comment xml:lang="ar">دورة Kolf</comment>
+ <comment xml:lang="az">Kolf meydançası</comment>
+ <comment xml:lang="be">Поле для гольфа Kolf</comment>
+ <comment xml:lang="ca">Camp del Kolf</comment>
+ <comment xml:lang="cs">Kurz Kolf</comment>
+ <comment xml:lang="de">Kolf-Platz</comment>
+ <comment xml:lang="el">Πίστα Kolf</comment>
+ <comment xml:lang="en_GB">Kolf course</comment>
+ <comment xml:lang="es">Campo de Kolf</comment>
+ <comment xml:lang="eu">Kolf zelaia</comment>
+ <comment xml:lang="fi">Kolf-rata</comment>
+ <comment xml:lang="fr">Parcours pour Kolf</comment>
+ <comment xml:lang="hi">कोल्फ कोर्स</comment>
+ <comment xml:lang="hu">Kolf-pálya</comment>
+ <comment xml:lang="ia">Kolf : curso</comment>
+ <comment xml:lang="it">Campo di Kolf</comment>
+ <comment xml:lang="ko">Kolf 코스</comment>
+ <comment xml:lang="lt">Kolf laukas</comment>
+ <comment xml:lang="nl">Kolf-baan</comment>
+ <comment xml:lang="nn">Kolf-bane</comment>
+ <comment xml:lang="pl">Pole golfowe Kolfa</comment>
+ <comment xml:lang="pt">Campo do Kolf</comment>
+ <comment xml:lang="pt_BR">Campo de golfe</comment>
+ <comment xml:lang="ro">curs de Kolf</comment>
+ <comment xml:lang="sl">Igrišče Kolf</comment>
+ <comment xml:lang="sv">Kolfbana</comment>
+ <comment xml:lang="tr">Kolf etabı</comment>
+ <comment xml:lang="uk">майданчик Kolf</comment>
+ <comment xml:lang="vi">sân Kolf</comment>
+ <comment xml:lang="zh_CN">Kolf 场地</comment>
+ <magic priority="80">
+ <match offset="0" type="string" value="[0-course@-50,-50]" />
+ </magic>
+ <glob pattern="*.kolf"/>
+ <glob pattern="*.course"/>
+ <glob pattern="*.kourse"/>
+ </mime-type>
+
+ <mime-type type="application/vnd.kde.okular-archive">
+ <comment>Okular document archive</comment>
+ <comment xml:lang="ar">أرشيف مستند أوكلار</comment>
+ <comment xml:lang="az">Okular sənəd arxivi</comment>
+ <comment xml:lang="be">Архіў дакументаў Okular</comment>
+ <comment xml:lang="ca">Arxiu de document de l'Okular</comment>
+ <comment xml:lang="cs">Archiv dokumentu Okular</comment>
+ <comment xml:lang="de">Okular-Dokumentarchiv</comment>
+ <comment xml:lang="el">Αρχειοθήκη εγγράφων Okular</comment>
+ <comment xml:lang="en_GB">Okular document archive</comment>
+ <comment xml:lang="es">Archivo de documento de Okular</comment>
+ <comment xml:lang="eu">Okular-reko dokumentu-artxiboa</comment>
+ <comment xml:lang="fi">Okular-tiedostoarkisto</comment>
+ <comment xml:lang="fr">Archive de documents pour Okular</comment>
+ <comment xml:lang="hi">ऑकुलर दस्तावेज़ अभिलेखागार</comment>
+ <comment xml:lang="hu">Okular-archívum</comment>
+ <comment xml:lang="ia">Okular : archivo de documento</comment>
+ <comment xml:lang="it">Archivio di documenti di Okular</comment>
+ <comment xml:lang="ko">Okular 문서 압축 파일</comment>
+ <comment xml:lang="lt">Okular dokumento archyvas</comment>
+ <comment xml:lang="nl">Okular-documentarchief</comment>
+ <comment xml:lang="nn">Okular-dokumentarkiv</comment>
+ <comment xml:lang="pl">Archiwum dokumentu Okulara</comment>
+ <comment xml:lang="pt">Pacote de documentos do Okular</comment>
+ <comment xml:lang="pt_BR">Arquivo de documento do Okular</comment>
+ <comment xml:lang="ro">arhivă cu documente Okular</comment>
+ <comment xml:lang="sl">Arhiv dokumentov za Okular</comment>
+ <comment xml:lang="sv">Okular-dokumentarkiv</comment>
+ <comment xml:lang="ta">ஆக்குலர் ஆவணக் காப்பகம்</comment>
+ <comment xml:lang="tr">Okular belge arşivi</comment>
+ <comment xml:lang="uk">архів документа Okular</comment>
+ <comment xml:lang="vi">kho trữ tài liệu Okular</comment>
+ <comment xml:lang="zh_CN">Okular 文档存档</comment>
+ <glob pattern="*.okular"/>
+ </mime-type>
+
+ <mime-type type="application/x-cabri">
+ <comment>Cabri figure</comment>
+ <comment xml:lang="ar">صورة Cabri</comment>
+ <comment xml:lang="az">Cabri fiquru</comment>
+ <comment xml:lang="be">Фігура Cabri</comment>
+ <comment xml:lang="ca">Figura del Cabri</comment>
+ <comment xml:lang="cs">Obrázek Cabri</comment>
+ <comment xml:lang="de">Cabri-Zeichnung</comment>
+ <comment xml:lang="el">Σχήμα Cabri</comment>
+ <comment xml:lang="en_GB">Cabri figure</comment>
+ <comment xml:lang="es">Figura de Cabri</comment>
+ <comment xml:lang="eu">Cabri-ko irudia</comment>
+ <comment xml:lang="fi">Cabri-kuvio</comment>
+ <comment xml:lang="fr">Figure pour Cabri</comment>
+ <comment xml:lang="hi">केबरी आकृति</comment>
+ <comment xml:lang="hu">Cabri-alakzat</comment>
+ <comment xml:lang="ia">Cabri : Figura</comment>
+ <comment xml:lang="it">Figura di Cabri</comment>
+ <comment xml:lang="ko">Cabri 그림</comment>
+ <comment xml:lang="lt">Cabri figūra</comment>
+ <comment xml:lang="nl">Cabri-figuur</comment>
+ <comment xml:lang="nn">Cabri-figur</comment>
+ <comment xml:lang="pl">Rysunek Cabri</comment>
+ <comment xml:lang="pt">Imagem do Cabri</comment>
+ <comment xml:lang="pt_BR">Imagem do Cabri</comment>
+ <comment xml:lang="ro">figură Cabri</comment>
+ <comment xml:lang="sl">Lik Cabri</comment>
+ <comment xml:lang="sv">Cabri-figur</comment>
+ <comment xml:lang="ta">Cabri படம்</comment>
+ <comment xml:lang="tr">Cabri çizimi</comment>
+ <comment xml:lang="uk">рисунок Cabri</comment>
+ <comment xml:lang="vi">hình Cabri</comment>
+ <comment xml:lang="zh_CN">Cabri 图形</comment>
+ <magic priority="80">
+ <match offset="0" type="string" value="FIGURE CabriII vers. " /> <!-- Cabri 1.0 -->
+ <match offset="0" type="string" value="Figure Cabri II " /> <!-- Cabri 1.2 -->
+ </magic>
+ <glob pattern="*.fig"/>
+ </mime-type>
+ <mime-type type="application/x-drgeo">
+ <comment>Dr. Geo figure</comment>
+ <comment xml:lang="ar">صورة Dr. Geo</comment>
+ <comment xml:lang="az">Dr. Geo fiquru</comment>
+ <comment xml:lang="be">Фігура Dr. Geo</comment>
+ <comment xml:lang="ca">Figura del Dr. Geo</comment>
+ <comment xml:lang="cs">Obrázek Dr. Geo</comment>
+ <comment xml:lang="de">Dr.-Geo-Zeichnung</comment>
+ <comment xml:lang="el">Σχήμα Dr. Geo</comment>
+ <comment xml:lang="en_GB">Dr. Geo figure</comment>
+ <comment xml:lang="es">Figura de Dr. Geo</comment>
+ <comment xml:lang="eu">Geo Dk. irudia</comment>
+ <comment xml:lang="fi">Dr. Geo -kuvio</comment>
+ <comment xml:lang="fr">Figure pour « Dr. Geo »</comment>
+ <comment xml:lang="hi">डॉ. जिओ आकृति</comment>
+ <comment xml:lang="hu">Dr. Geo-alakzat</comment>
+ <comment xml:lang="ia">Dr.Geo : Figura</comment>
+ <comment xml:lang="it">Figura di Dr. Geo</comment>
+ <comment xml:lang="ko">Dr. Geo 그림</comment>
+ <comment xml:lang="lt">Dr. Geo figūra</comment>
+ <comment xml:lang="nl">Dr. Geo-figuur</comment>
+ <comment xml:lang="nn">Dr. Geo-figur</comment>
+ <comment xml:lang="pl">Rysunek Dr. Geo</comment>
+ <comment xml:lang="pt">Imagem do Dr. Geo</comment>
+ <comment xml:lang="pt_BR">Imagem do Dr. Geo</comment>
+ <comment xml:lang="ro">figură Dr. Geo</comment>
+ <comment xml:lang="sl">Lik Dr. Geo</comment>
+ <comment xml:lang="sv">Dr. Geo-figur</comment>
+ <comment xml:lang="ta">Dr. Geo படம்</comment>
+ <comment xml:lang="tr">Dr. Geo çizimi</comment>
+ <comment xml:lang="uk">рисунок Dr. Geo</comment>
+ <comment xml:lang="vi">hình Dr. Geo</comment>
+ <comment xml:lang="zh_CN">Dr. Geo 图形</comment>
+ <magic priority="80">
+ <match offset="0" type="string" value="<?xml version="1.0"?>\n<drgenius>" />
+ </magic>
+ <glob pattern="*.fgeo"/>
+ </mime-type>
+ <mime-type type="application/x-kgeo">
+ <comment>KGeo figure</comment>
+ <comment xml:lang="ar">صورة KGeo</comment>
+ <comment xml:lang="az">KGeo fiquru</comment>
+ <comment xml:lang="be">Фігура KGeo</comment>
+ <comment xml:lang="ca">Figura del KGeo</comment>
+ <comment xml:lang="cs">Obrázek KGeo</comment>
+ <comment xml:lang="de">KGeo-Zeichnung</comment>
+ <comment xml:lang="el">Σχήμα KGeo</comment>
+ <comment xml:lang="en_GB">KGeo figure</comment>
+ <comment xml:lang="es">Figura de KGeo</comment>
+ <comment xml:lang="eu">KGeo-ko irudia</comment>
+ <comment xml:lang="fi">KGeo-kuvio</comment>
+ <comment xml:lang="fr">Figure pour KGeo</comment>
+ <comment xml:lang="hi">के-जिओ आकृति</comment>
+ <comment xml:lang="hu">KGeo-alakzat</comment>
+ <comment xml:lang="ia">KGeo : Figura</comment>
+ <comment xml:lang="it">Figura di KGeo</comment>
+ <comment xml:lang="ko">KGeo 그림</comment>
+ <comment xml:lang="lt">KGeo figūra</comment>
+ <comment xml:lang="nl">KGeo-figuur</comment>
+ <comment xml:lang="nn">KGeo-figur</comment>
+ <comment xml:lang="pl">Rysunek KGeo</comment>
+ <comment xml:lang="pt">Imagem do KGeo</comment>
+ <comment xml:lang="pt_BR">Imagem do KGeo</comment>
+ <comment xml:lang="ro">figură KGeo</comment>
+ <comment xml:lang="sl">Lik KGeo</comment>
+ <comment xml:lang="sv">Kgeo-figur</comment>
+ <comment xml:lang="ta">KGeo படம்</comment>
+ <comment xml:lang="tr">KGeo çizimi</comment>
+ <comment xml:lang="uk">рисунок KGeo</comment>
+ <comment xml:lang="vi">hình KGeo</comment>
+ <comment xml:lang="zh_CN">KGeo 图形</comment>
+ <glob pattern="*.kgeo"/>
+ </mime-type>
+ <mime-type type="application/x-kig">
+ <comment>Kig figure</comment>
+ <comment xml:lang="ar">صورة Kig</comment>
+ <comment xml:lang="az">Kig fiquru</comment>
+ <comment xml:lang="be">Фігура Kig</comment>
+ <comment xml:lang="ca">Figura del Kig</comment>
+ <comment xml:lang="cs">Obrázek Kig</comment>
+ <comment xml:lang="de">Kig-Zeichnung</comment>
+ <comment xml:lang="el">Σχήμα Kig</comment>
+ <comment xml:lang="en_GB">Kig figure</comment>
+ <comment xml:lang="es">Figura de Kig</comment>
+ <comment xml:lang="eu">Kig-eko irudia</comment>
+ <comment xml:lang="fi">Kig-kuvio</comment>
+ <comment xml:lang="fr">Dessin pour Kig</comment>
+ <comment xml:lang="hi">केआइजी आकृति</comment>
+ <comment xml:lang="hu">Kig-alakzat</comment>
+ <comment xml:lang="ia">Kig : figura</comment>
+ <comment xml:lang="it">Figura di Kig</comment>
+ <comment xml:lang="ko">Kig 그림</comment>
+ <comment xml:lang="lt">Kig figūra</comment>
+ <comment xml:lang="nl">Kig-figuur</comment>
+ <comment xml:lang="nn">Kig-figur</comment>
+ <comment xml:lang="pl">Rysunek Kig</comment>
+ <comment xml:lang="pt">Imagem do Kig</comment>
+ <comment xml:lang="pt_BR">Imagem do Kig</comment>
+ <comment xml:lang="ro">figură Kig</comment>
+ <comment xml:lang="sl">Lik Kig</comment>
+ <comment xml:lang="sv">Kig-figur</comment>
+ <comment xml:lang="ta">Kig படம்</comment>
+ <comment xml:lang="tr">Kig çizimi</comment>
+ <comment xml:lang="uk">рисунок Kig</comment>
+ <comment xml:lang="vi">hình Kig</comment>
+ <comment xml:lang="zh_CN">Kig 图形</comment>
+ <glob pattern="*.kig"/>
+ <glob pattern="*.kigz"/>
+ </mime-type>
+ <mime-type type="application/x-kseg">
+ <comment>KSeg document</comment>
+ <comment xml:lang="ar">وثيقة KSeg</comment>
+ <comment xml:lang="az">KSeg sənədi</comment>
+ <comment xml:lang="be">Дакумент KSeg</comment>
+ <comment xml:lang="ca">Document del KSeg</comment>
+ <comment xml:lang="cs">Dokument KSeg</comment>
+ <comment xml:lang="de">KSeg-Dokument</comment>
+ <comment xml:lang="el">Έγγραφο KSeg</comment>
+ <comment xml:lang="en_GB">KSeg document</comment>
+ <comment xml:lang="es">Documento de KSeg</comment>
+ <comment xml:lang="eu">KSeg-eko dokumentua</comment>
+ <comment xml:lang="fi">KSeg-tiedosto</comment>
+ <comment xml:lang="fr">Document pour KSeg</comment>
+ <comment xml:lang="hi">के-सेग दस्तावेज़</comment>
+ <comment xml:lang="hu">KSeg-dokumentum</comment>
+ <comment xml:lang="ia">KSeg :documento</comment>
+ <comment xml:lang="it">Documento di KSeg</comment>
+ <comment xml:lang="ko">KSeg 문서</comment>
+ <comment xml:lang="lt">KSeg dokumentas</comment>
+ <comment xml:lang="nl">KSeg-document</comment>
+ <comment xml:lang="nn">KSeg-dokument</comment>
+ <comment xml:lang="pl">Dokument KSeg</comment>
+ <comment xml:lang="pt">Documento do KSeg</comment>
+ <comment xml:lang="pt_BR">Documento do KSeg</comment>
+ <comment xml:lang="ro">document KSeg</comment>
+ <comment xml:lang="sl">Dokument KSeg</comment>
+ <comment xml:lang="sv">Kseg-dokument</comment>
+ <comment xml:lang="ta">KSeg ஆவணம்</comment>
+ <comment xml:lang="tr">KSeg belgesi</comment>
+ <comment xml:lang="uk">документ KSeg</comment>
+ <comment xml:lang="vi">tài liệu KSeg</comment>
+ <comment xml:lang="zh_CN">KSeg 文档</comment>
+ <glob pattern="*.seg"/>
+ </mime-type>
+ <mime-type type="application/x-kvtml">
+ <sub-class-of type="application/xml"/>
+ <comment>vocabulary trainer document</comment>
+ <comment xml:lang="ar">وثيقة مدرب المفردات</comment>
+ <comment xml:lang="az">söz ehtiyatını artırmaq</comment>
+ <comment xml:lang="be">дакумент для лексічнай практыкі</comment>
+ <comment xml:lang="ca">Document de l'entrenador de vocabulari</comment>
+ <comment xml:lang="cs">Dokument tréningu slovní zásoby</comment>
+ <comment xml:lang="de">Vokabeltrainer-Dokument</comment>
+ <comment xml:lang="el">έγγραφο εκπαιδευτή λεξιλογίου</comment>
+ <comment xml:lang="en_GB">vocabulary trainer document</comment>
+ <comment xml:lang="es">documento de entrenador de vocabulario</comment>
+ <comment xml:lang="eu">hiztegi-trebatzaileko dokumentua</comment>
+ <comment xml:lang="fi">sanavaraston koulutustiedosto</comment>
+ <comment xml:lang="fr">Document d'apprentissage du vocabulaire</comment>
+ <comment xml:lang="hi">शब्दावली प्रशिक्षक दस्तावेज़</comment>
+ <comment xml:lang="hu">szógyűjtemény</comment>
+ <comment xml:lang="ia">documento de instructor de vocabulario</comment>
+ <comment xml:lang="it">Documento di allenamento a vocabolario</comment>
+ <comment xml:lang="ko">단어장</comment>
+ <comment xml:lang="lt">žodyno treniruoklio dokumentas</comment>
+ <comment xml:lang="nl">document voor woordenschattrainer</comment>
+ <comment xml:lang="nn">ordtreningsdokument</comment>
+ <comment xml:lang="pl">dokument do ćwiczenia słownictwa</comment>
+ <comment xml:lang="pt">documento de treino de vocabulários</comment>
+ <comment xml:lang="pt_BR">documento de treino de vocabulários</comment>
+ <comment xml:lang="ro">document de antrenare a vocabularului</comment>
+ <comment xml:lang="sl">dokument za vadbo besedišča</comment>
+ <comment xml:lang="sv">dokument för ordförrådsövning</comment>
+ <comment xml:lang="tr">sözcük hazinesi çalışma belgesi</comment>
+ <comment xml:lang="uk">документ вправ зі словником</comment>
+ <comment xml:lang="vi">tài liệu huấn luyện viên từ vựng</comment>
+ <comment xml:lang="zh_CN">词汇训练文档</comment>
+ <glob pattern="*.kvtml"/>
+ </mime-type>
+ <mime-type type="application/x-kmplot">
+ <comment>KmPlot file</comment>
+ <comment xml:lang="ar">ملف KmPlot</comment>
+ <comment xml:lang="az">KmPlot faylı</comment>
+ <comment xml:lang="be">Файл KmPlot</comment>
+ <comment xml:lang="ca">Fitxer del KmPlot</comment>
+ <comment xml:lang="cs">Soubor KmPlot</comment>
+ <comment xml:lang="de">KmPlot-Datei</comment>
+ <comment xml:lang="el">Αρχείο KmPlot</comment>
+ <comment xml:lang="en_GB">KmPlot file</comment>
+ <comment xml:lang="es">Archivo de KmPlot</comment>
+ <comment xml:lang="eu">KmPlot fitxategia</comment>
+ <comment xml:lang="fi">KmPlot-tiedosto</comment>
+ <comment xml:lang="fr">Fichier pour KmPlot</comment>
+ <comment xml:lang="hi">के-एम-प्लॉट फ़ाइल</comment>
+ <comment xml:lang="hu">KmPlot-fájl</comment>
+ <comment xml:lang="ia">KmPlot: file</comment>
+ <comment xml:lang="it">File di KmPlot</comment>
+ <comment xml:lang="ko">KmPlot 파일</comment>
+ <comment xml:lang="lt">KmPlot failas</comment>
+ <comment xml:lang="nl">KmPlot-bestand</comment>
+ <comment xml:lang="nn">KmPlot-fil</comment>
+ <comment xml:lang="pl">Plik KmPlot</comment>
+ <comment xml:lang="pt">Ficheiro do KmPlot</comment>
+ <comment xml:lang="pt_BR">Arquivo do KmPlot</comment>
+ <comment xml:lang="ro">fișier KmPlot</comment>
+ <comment xml:lang="sl">Datoteka KmPlot</comment>
+ <comment xml:lang="sv">Kmplot-fil</comment>
+ <comment xml:lang="ta">KmPlot கோப்பு</comment>
+ <comment xml:lang="tr">KmPlot dosyası</comment>
+ <comment xml:lang="uk">файл KmPlot</comment>
+ <comment xml:lang="vi">tệp KmPlot</comment>
+ <comment xml:lang="zh_CN">KmPlot 文件</comment>
+ <glob pattern="*.fkt"/>
+ </mime-type>
+ <mime-type type="application/x-kwordquiz">
+ <comment>KWordQuiz vocabulary</comment>
+ <comment xml:lang="ar">مفردات KWordQuiz</comment>
+ <comment xml:lang="az">KWordQuiz lüğəti</comment>
+ <comment xml:lang="be">Слоўнік KWordQuiz</comment>
+ <comment xml:lang="ca">Vocabulari del KWordQuiz</comment>
+ <comment xml:lang="cs">Slovní zásoba KWordQuiz</comment>
+ <comment xml:lang="de">KWordQuiz-Vokabular</comment>
+ <comment xml:lang="el">Λεξιλόγιο KWordQuiz</comment>
+ <comment xml:lang="en_GB">KWordQuiz vocabulary</comment>
+ <comment xml:lang="es">Vocabulario de KWordQuiz</comment>
+ <comment xml:lang="eu">KWordQuiz-eko hiztegia</comment>
+ <comment xml:lang="fi">KWordQuiz-sanasto</comment>
+ <comment xml:lang="fr">Vocabulaire pour KWordQuiz</comment>
+ <comment xml:lang="hi">के-वर्ड-क्विज शब्दावली</comment>
+ <comment xml:lang="hu">KWordQuiz-szótár</comment>
+ <comment xml:lang="ia">Vocabulario de KWordQuiz</comment>
+ <comment xml:lang="it">Vocabolario di KWordQuiz</comment>
+ <comment xml:lang="ko">KWordQuiz 단어장</comment>
+ <comment xml:lang="lt">KWordQuiz žodynas</comment>
+ <comment xml:lang="nl">KWordQuiz-woordenschat</comment>
+ <comment xml:lang="nn">KWordQuiz-vokabular</comment>
+ <comment xml:lang="pl">Słownictwo KWordQuiz</comment>
+ <comment xml:lang="pt">Vocabulário do KWordQuiz</comment>
+ <comment xml:lang="pt_BR">Vocabulário do KWordQuiz</comment>
+ <comment xml:lang="ro">vocabular KWordQuiz</comment>
+ <comment xml:lang="sl">Besedišče KWordQuiz</comment>
+ <comment xml:lang="sv">Kwordquiz-ordförråd</comment>
+ <comment xml:lang="tr">KWordQuiz sözcük hazinesi</comment>
+ <comment xml:lang="uk">словник KWordQuiz</comment>
+ <comment xml:lang="vi">từ vựng KWordQuiz</comment>
+ <comment xml:lang="zh_CN">KWordQuiz 词汇表</comment>
+ <glob pattern="*.wql"/>
+ </mime-type>
+
+ <mime-type type="application/x-kcachegrind">
+ <comment>Cachegrind/Callgrind profile dump</comment>
+ <comment xml:lang="ar">تشكيلة تفريغ Cachegrind/Callgrind </comment>
+ <comment xml:lang="az">Cachegrind/Callgrind profil məlumatı</comment>
+ <comment xml:lang="be">Дамп профілю Cachegrind / Callgrind</comment>
+ <comment xml:lang="ca">Bolcat d'anàlisi de rendiment del Cachegrind/Callgrind</comment>
+ <comment xml:lang="cs">Výpis profilu Cachegrind/Callgrind</comment>
+ <comment xml:lang="de">Cachegrind/Callgrind-Profil-Ausgabe</comment>
+ <comment xml:lang="el">Αποτύπωση προφίλ Cachegrind/Callgrind</comment>
+ <comment xml:lang="en_GB">Cachegrind/Callgrind profile dump</comment>
+ <comment xml:lang="es">Volcado de análisis de rendimiento de Cachegrind/Callgrind</comment>
+ <comment xml:lang="eu">Cachegrind/Callgrind profil iraulketa</comment>
+ <comment xml:lang="fi">Cachegrind/Callgrind-profiilivedos</comment>
+ <comment xml:lang="fr">Vidage de profil pour Cachegrind / Callgrind</comment>
+ <comment xml:lang="hi">कैशे/कॉलग्राइंड प्रोफ़ाइल डंप</comment>
+ <comment xml:lang="hu">Cachegrind/Callgrind-képfájl</comment>
+ <comment xml:lang="ia">Cachegrind/Callgrind : Discargatorio de profilo</comment>
+ <comment xml:lang="it">Dump di profilatura di Cachegrind/Callgrind</comment>
+ <comment xml:lang="ko">Cachegrind/Callgrind 프로필 덤프</comment>
+ <comment xml:lang="lt">Cachegrind/Callgrind profilio kopija</comment>
+ <comment xml:lang="nl">Cachegrind/Callgrind profieldump</comment>
+ <comment xml:lang="nn">Cachegrind/Callgrind-profildump</comment>
+ <comment xml:lang="pl">Zrzut profilu Cachegrinda/Callgrinda</comment>
+ <comment xml:lang="pt">Resultado da análise do Cachegrind/Callgrind</comment>
+ <comment xml:lang="pt_BR">Resultado da análise do Cachegrind/Callgrind</comment>
+ <comment xml:lang="ro">informații de profilare Cachegrind/Callgrind</comment>
+ <comment xml:lang="sl">Izpis profila Cachegrind/Callgrind</comment>
+ <comment xml:lang="sv">Cachegrind/Callgrind-profileringsutskrift</comment>
+ <comment xml:lang="tr">Cachegrind/Callgrind profil dökümü</comment>
+ <comment xml:lang="uk">дамп профілювання Cachegrind/Callgrind</comment>
+ <comment xml:lang="vi">phần xổ tiểu sử Cachegrind/Callgrind</comment>
+ <comment xml:lang="zh_CN">Cachegrind/Callgrind 配置转储文件</comment>
+ <glob pattern="cachegrind.out*"/>
+ <glob pattern="callgrind.out*"/>
+ </mime-type>
+ <mime-type type="application/x-uml">
+ <comment>Umbrello UML Modeller file</comment>
+ <comment xml:lang="ar">ملف Umbrello UML Modeller </comment>
+ <comment xml:lang="az">Umbrello UML Modeller faylı</comment>
+ <comment xml:lang="be">Файл Umbrello UML Modeller</comment>
+ <comment xml:lang="ca">Fitxer del modelador UML Umbrello</comment>
+ <comment xml:lang="cs">Soubor Umbrello UML Modeller</comment>
+ <comment xml:lang="de">Umbrello-UML-Datei</comment>
+ <comment xml:lang="el">Αρχείο μοντελοποίησης Umbrello UML</comment>
+ <comment xml:lang="en_GB">Umbrello UML Modeller file</comment>
+ <comment xml:lang="es">Archivo del modelador UML Umbrello</comment>
+ <comment xml:lang="eu">Umbrello UML Modelatzailerako fitxategia</comment>
+ <comment xml:lang="fi">Umbrello UML Modeller -tiedosto</comment>
+ <comment xml:lang="fr">Fichier de modélisation « UML » pour Umbrello</comment>
+ <comment xml:lang="hi"> उंब्रेल्लो यूएमएल मोडलर फ़ाइल</comment>
+ <comment xml:lang="hu">Umbrello UML-fájl</comment>
+ <comment xml:lang="ia">Umbrello: file Modellator UML</comment>
+ <comment xml:lang="it">File del modellatore UML Umbrello</comment>
+ <comment xml:lang="ko">Umbrello UML 모델러 파일</comment>
+ <comment xml:lang="lt">Umbrello UML modeliuotojo failas</comment>
+ <comment xml:lang="nl">Umbrello UML Modeller-bestand</comment>
+ <comment xml:lang="nn">Umbrello UML Modeller-fil</comment>
+ <comment xml:lang="pl">Plik programu modelującego Umbrello UML</comment>
+ <comment xml:lang="pt">Ficheiro de modelação em UML do Umbrello</comment>
+ <comment xml:lang="pt_BR">Arquivo de modelador UML do Umbrello</comment>
+ <comment xml:lang="ro">fișier Modelator UML Umbrello</comment>
+ <comment xml:lang="sl">Datoteka UML modelirnika Umbrello</comment>
+ <comment xml:lang="sv">Umbrello UML-modelleringsfil</comment>
+ <comment xml:lang="tr">Umbrello UML Modelleyici dosyası</comment>
+ <comment xml:lang="uk">файл програми для моделювання UML Umbrello</comment>
+ <comment xml:lang="vi">tệp Trình tạo mô hình UML Umbrello</comment>
+ <comment xml:lang="zh_CN">Umbrello UML 建模文件</comment>
+ <glob pattern="*.xmi"/>
+ <glob pattern="*.xmi.tgz"/>
+ <glob pattern="*.xmi.tar.bz2"/>
+ </mime-type>
+
+ <mime-type type="application/x-ms-shortcut">
+ <comment>Windows link</comment>
+ <comment xml:lang="ar">وصلة ويندوز</comment>
+ <comment xml:lang="az">Windows yarlığı</comment>
+ <comment xml:lang="be">Спасылка Windows</comment>
+ <comment xml:lang="ca">Enllaç de Windows</comment>
+ <comment xml:lang="cs">Odkaz Windows</comment>
+ <comment xml:lang="de">Windows-Verknüpfung</comment>
+ <comment xml:lang="el">Αρχείο δεσμού Windows</comment>
+ <comment xml:lang="en_GB">Windows link</comment>
+ <comment xml:lang="es">Enlace de Windows</comment>
+ <comment xml:lang="eu">Windows-eko esteka</comment>
+ <comment xml:lang="fi">Windows-linkki</comment>
+ <comment xml:lang="fr">Lien pour Windows</comment>
+ <comment xml:lang="hi">विंडोज़ लिंक</comment>
+ <comment xml:lang="hu">Windows-link</comment>
+ <comment xml:lang="ia">Ligamine de Windows</comment>
+ <comment xml:lang="it">Collegamento di Windows</comment>
+ <comment xml:lang="ko">Windows 링크</comment>
+ <comment xml:lang="lt">Windows nuoroda</comment>
+ <comment xml:lang="nl">Windows-koppeling</comment>
+ <comment xml:lang="nn">Windows-lenkje</comment>
+ <comment xml:lang="pl">Odnośnik Windows</comment>
+ <comment xml:lang="pt">Hiperligação do Windows</comment>
+ <comment xml:lang="pt_BR">Link do Windows</comment>
+ <comment xml:lang="ro">legătură Windows</comment>
+ <comment xml:lang="sl">Povezava v Windows</comment>
+ <comment xml:lang="sv">Windows-länk</comment>
+ <comment xml:lang="ta">விண்டோஸ் இணைப்பு</comment>
+ <comment xml:lang="tr">Windows bağlantısı</comment>
+ <comment xml:lang="uk">посилання Windows</comment>
+ <comment xml:lang="vi">liên kết Windows</comment>
+ <comment xml:lang="zh_CN">Windows 链接</comment>
+ <alias type="application/x-win-lnk"/>
+ <glob pattern="*.lnk"/>
+ </mime-type>
+
+ <mime-type type="application/x-kgetlist">
+ <sub-class-of type="application/xml"/>
+ <comment>KGet download list</comment>
+ <comment xml:lang="ar">قائمة تنزيل KGet</comment>
+ <comment xml:lang="az">KGet yükləmə siyahısı</comment>
+ <comment xml:lang="be">Спіс загрузак KGet</comment>
+ <comment xml:lang="ca">Llista de baixades del KGet</comment>
+ <comment xml:lang="cs">Seznam stahování KGet</comment>
+ <comment xml:lang="de">KGet-Downloadliste</comment>
+ <comment xml:lang="el">Λίστα λήψης KGet</comment>
+ <comment xml:lang="en_GB">KGet download list</comment>
+ <comment xml:lang="es">Lista de descarga de KGet</comment>
+ <comment xml:lang="eu">KGet-en zama-jaisteko zerrenda</comment>
+ <comment xml:lang="fi">KGet-latausluettelo</comment>
+ <comment xml:lang="fr">Liste de téléchargements pour KGet</comment>
+ <comment xml:lang="hi">के-गेट डाउनलोड सूची</comment>
+ <comment xml:lang="hu">KGet letöltési lista</comment>
+ <comment xml:lang="ia">KGet : Lista de discargar</comment>
+ <comment xml:lang="it">Elenco di scaricamenti di KGet</comment>
+ <comment xml:lang="ko">KGet 다운로드 목록</comment>
+ <comment xml:lang="lt">KGet atsiuntimų sąrašas</comment>
+ <comment xml:lang="nl">KGet-downloadlijst</comment>
+ <comment xml:lang="nn">KGet-nedlastingsliste</comment>
+ <comment xml:lang="pl">Lista pobierania KGet</comment>
+ <comment xml:lang="pt">Lista de transferências do KGet</comment>
+ <comment xml:lang="pt_BR">Lista de downloads do KGet</comment>
+ <comment xml:lang="ro">listă cu descărcări KGet</comment>
+ <comment xml:lang="sl">Seznam prejemov KGet</comment>
+ <comment xml:lang="sv">Kget-nerladdningslista</comment>
+ <comment xml:lang="ta">KGet பதிவிறக்க பட்டியல்</comment>
+ <comment xml:lang="tr">KGet indirme listesi</comment>
+ <comment xml:lang="uk">список отримань KGet</comment>
+ <comment xml:lang="vi">danh sách tải về KGet</comment>
+ <comment xml:lang="zh_CN">KGet 下载列表</comment>
+ <glob pattern="*.kgt"/>
+ </mime-type>
+ <mime-type type="application/x-kopete-emoticons">
+ <comment>Kopete emoticons archive</comment>
+ <comment xml:lang="ar">أرشف إبتسامات Kopete</comment>
+ <comment xml:lang="az">Kopete ifadələr arxivi</comment>
+ <comment xml:lang="be">Архіў смайлікаў Kopete</comment>
+ <comment xml:lang="ca">Arxiu d'emoticones del Kopete</comment>
+ <comment xml:lang="cs">Archiv emotikonů Kopete</comment>
+ <comment xml:lang="de">Kopete-Emoticons-Archiv</comment>
+ <comment xml:lang="el">Αρχειοθήκη εικονιδίων διάθεσης Kopete</comment>
+ <comment xml:lang="en_GB">Kopete emoticons archive</comment>
+ <comment xml:lang="es">Archivo de emoticonos de Kopete</comment>
+ <comment xml:lang="eu">Kopete-ko aurpegiera-artxiboa</comment>
+ <comment xml:lang="fi">Kopete-hymiöarkisto</comment>
+ <comment xml:lang="fr">Archive d'émoticônes pour Kopete</comment>
+ <comment xml:lang="hi">कोपिट इमोटिकॉन्स अभिलेखागार</comment>
+ <comment xml:lang="hu">Kopete-emotikoncsomag</comment>
+ <comment xml:lang="ia">Archivo de emoticones de Kopete</comment>
+ <comment xml:lang="it">Archivio di faccine di Kopete</comment>
+ <comment xml:lang="ko">Kopete 이모티콘 압축 파일</comment>
+ <comment xml:lang="lt">Kopete jaustukų archyvas</comment>
+ <comment xml:lang="nl">Kopete emoticon-archief</comment>
+ <comment xml:lang="nn">Fjesingtema for Kopete</comment>
+ <comment xml:lang="pl">Archiwum emotikon Kopete</comment>
+ <comment xml:lang="pt">Pacote de ícones emotivos do Kopete</comment>
+ <comment xml:lang="pt_BR">Arquivo de emoticons do Kopete</comment>
+ <comment xml:lang="ro">arhivă cu emoticoni Kopete</comment>
+ <comment xml:lang="sl">Arhiv z izraznimi ikonami za Kopete</comment>
+ <comment xml:lang="sv">Kopete-smilisarkiv</comment>
+ <comment xml:lang="tr">Kopete duygu simgeleri arşivi</comment>
+ <comment xml:lang="uk">архів емоційок Kopete</comment>
+ <comment xml:lang="vi">kho trữ hình biểu cảm Kopete</comment>
+ <comment xml:lang="zh_CN">Kopete 表情存档</comment>
+ <glob pattern="*.kopete-emoticons"/>
+ </mime-type>
+ <mime-type type="application/x-icq">
+ <comment>ICQ contact</comment>
+ <comment xml:lang="ar">جهة اتصال ICQ</comment>
+ <comment xml:lang="az">ICQ kontakt</comment>
+ <comment xml:lang="be">Кантакт ICQ</comment>
+ <comment xml:lang="ca">Contacte de l'ICQ</comment>
+ <comment xml:lang="cs">Kontakt ICQ</comment>
+ <comment xml:lang="de">ICQ-Kontakt</comment>
+ <comment xml:lang="el">Επαφή ICQ</comment>
+ <comment xml:lang="en_GB">ICQ contact</comment>
+ <comment xml:lang="es">Contacto de ICQ</comment>
+ <comment xml:lang="eu">ICQ-ko kontaktua</comment>
+ <comment xml:lang="fi">ICQ-yhteystieto</comment>
+ <comment xml:lang="fr">Contact « ICQ »</comment>
+ <comment xml:lang="hi">आइ सी क्यू सम्पर्क</comment>
+ <comment xml:lang="hu">ICQ-névjegy</comment>
+ <comment xml:lang="ia">ICQ : Contacto</comment>
+ <comment xml:lang="it">Contatto ICQ</comment>
+ <comment xml:lang="ko">ICQ 대화 상대</comment>
+ <comment xml:lang="lt">ICQ adresatas</comment>
+ <comment xml:lang="nl">ICQ-contact</comment>
+ <comment xml:lang="nn">ICQ-kontakt</comment>
+ <comment xml:lang="pl">Kontakt ICQ</comment>
+ <comment xml:lang="pt">Contacto de ICQ</comment>
+ <comment xml:lang="pt_BR">Contato do ICQ</comment>
+ <comment xml:lang="ro">contact ICQ</comment>
+ <comment xml:lang="sl">Stik ICQ</comment>
+ <comment xml:lang="sv">ICQ-kontakt</comment>
+ <comment xml:lang="ta">ICQ தொடர்பு</comment>
+ <comment xml:lang="tr">ICQ kişisi</comment>
+ <comment xml:lang="uk">контакт ICQ</comment>
+ <comment xml:lang="vi">liên hệ ICQ</comment>
+ <comment xml:lang="zh_CN">ICQ 联系人</comment>
+ <glob pattern="*.uin"/>
+ <glob pattern="*.icq"/>
+ </mime-type>
+
+ <mime-type type="video/x-ms-wmp"> <!-- fdo #19671, rejected because "not a file type, only a plugin type" -->
+ <comment>Microsoft Media Format</comment>
+ <comment xml:lang="ar">تنسيق وسائط مايكروسوفت</comment>
+ <comment xml:lang="az">Microsoft Media Format</comment>
+ <comment xml:lang="be">Фармат Microsoft Media</comment>
+ <comment xml:lang="ca">Format de suports de Microsoft</comment>
+ <comment xml:lang="cs">Microsoft Media Format</comment>
+ <comment xml:lang="de">Microsoft-Media-Format</comment>
+ <comment xml:lang="el">Τύπος μέσων της Microsoft</comment>
+ <comment xml:lang="en_GB">Microsoft Media Format</comment>
+ <comment xml:lang="es">Formato multimedia de Microsoft</comment>
+ <comment xml:lang="eu">Microsoft Media formatua</comment>
+ <comment xml:lang="fi">Microsoft Media -muoto</comment>
+ <comment xml:lang="fr">Format « Microsoft Média »</comment>
+ <comment xml:lang="hi">माइक्रोसॉफ़्ट मीडिया प्रारूप</comment>
+ <comment xml:lang="hu">Microsoft-médiafájl</comment>
+ <comment xml:lang="ia">Formato de Media de Microsoft</comment>
+ <comment xml:lang="it">Formato multimediale di Microsoft</comment>
+ <comment xml:lang="ko">Microsoft 미디어 포맷</comment>
+ <comment xml:lang="lt">Microsoft medijos formatas</comment>
+ <comment xml:lang="nl">Microsoft mediaformaat</comment>
+ <comment xml:lang="nn">Microsoft Media-format</comment>
+ <comment xml:lang="pl">Microsoft Media Format</comment>
+ <comment xml:lang="pt">Formato Multimédia da Microsoft</comment>
+ <comment xml:lang="pt_BR">Formato de mídia da Microsoft</comment>
+ <comment xml:lang="ro">Microsoft Media Format</comment>
+ <comment xml:lang="sl">Microsoft Media Format</comment>
+ <comment xml:lang="sv">Microsoft mediaformat</comment>
+ <comment xml:lang="ta">மைக்ரோசாப்ட் ஊடகப் படிவம்</comment>
+ <comment xml:lang="tr">Microsoft Medya Biçimi</comment>
+ <comment xml:lang="uk">Microsoft Media Format</comment>
+ <comment xml:lang="vi">Dạng thức phương tiện Microsoft</comment>
+ <comment xml:lang="zh_CN">Microsoft 媒体格式</comment>
+ <sub-class-of type="video/x-ms-wmv"/>
+ <alias type="video/mediaplayer"/>
+ <alias type="application/x-mplayer2"/>
+ <glob pattern="*.wmp"/>
+ </mime-type>
+
+ <!-- http://www.dajobe.org/2004/01/turtle/#sec-mime -->
+ <!-- Important: the SPARQL RDF query lanaguge uses turtle encoding for graph patterns. -->
+ <mime-type xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="application/x-turtle"> <!-- fdo #18089, but not in followup #32812 -->
+ <comment>Turtle RDF document</comment>
+ <comment xml:lang="ar">وثيقة Turtle RDF</comment>
+ <comment xml:lang="az">Turtle RDF sənədi</comment>
+ <comment xml:lang="be">Дакумент Turtle RDF</comment>
+ <comment xml:lang="ca">Document RDF del Turtle</comment>
+ <comment xml:lang="cs">Dokument Turtle RDF</comment>
+ <comment xml:lang="de">Turtle-RDF-Dokument</comment>
+ <comment xml:lang="el">Έγγραφο Turtle RDF</comment>
+ <comment xml:lang="en_GB">Turtle RDF document</comment>
+ <comment xml:lang="es">Documento RDF de Turtle</comment>
+ <comment xml:lang="eu">Turtle RDF dokumentua</comment>
+ <comment xml:lang="fi">Turtle RDF -tiedosto</comment>
+ <comment xml:lang="fr">Document « RDF » pour Turtle</comment>
+ <comment xml:lang="hi">टर्टल आरडीएफ दस्तावेज़</comment>
+ <comment xml:lang="hu">Turtle RDF-dokumentum</comment>
+ <comment xml:lang="ia">documento RDF de Turtle</comment>
+ <comment xml:lang="it">Documento Turtle RDF</comment>
+ <comment xml:lang="ko">Turtle RDF 문서</comment>
+ <comment xml:lang="lt">Turtle RDF dokumentas</comment>
+ <comment xml:lang="nl">Turtle RDF-document</comment>
+ <comment xml:lang="nn">Turtle RDF-dokument</comment>
+ <comment xml:lang="pl">Dokument Turtle RDF</comment>
+ <comment xml:lang="pt">Documento RDF do Turtle</comment>
+ <comment xml:lang="pt_BR">Documento RDF do Turtle</comment>
+ <comment xml:lang="ro">document RDF Turtle</comment>
+ <comment xml:lang="sl">Dokument Turtle RDF</comment>
+ <comment xml:lang="sv">Turtle RDF-dokument</comment>
+ <comment xml:lang="tr">Turtle RDF belgesi</comment>
+ <comment xml:lang="uk">документ RDF Turtle</comment>
+ <comment xml:lang="vi">tài liệu RDF Turtle</comment>
+ <comment xml:lang="zh_CN">Turtle RDF 文档</comment>
+ <sub-class-of type="text/plain" />
+ </mime-type>
+ <mime-type type="image/x-pic"> <!-- fdo #26038, needs update -->
+ <comment>Softimage PIC image</comment>
+ <comment xml:lang="ar">صورة PIC</comment>
+ <comment xml:lang="az">Softimage PIC şəkili</comment>
+ <comment xml:lang="be">Выява Softimage PIC</comment>
+ <comment xml:lang="ca">Imatge PIC de Softimage</comment>
+ <comment xml:lang="cs">Obrázek Softimage PIC</comment>
+ <comment xml:lang="de">Softimage-PIC-Bild</comment>
+ <comment xml:lang="el">Εικόνα Softimage PIC</comment>
+ <comment xml:lang="en_GB">Softimage PIC image</comment>
+ <comment xml:lang="es">Imagen PIC de Softimage</comment>
+ <comment xml:lang="eu">Softimage PIC irudia</comment>
+ <comment xml:lang="fi">Softimage PIC -kuva</comment>
+ <comment xml:lang="fr">Image « PIC » de Softimage</comment>
+ <comment xml:lang="hi">सॉफ्टइमेज पीआइसी छवि</comment>
+ <comment xml:lang="hu">Softimage PIC-kép</comment>
+ <comment xml:lang="ia">Imagine PIC de SoftImage</comment>
+ <comment xml:lang="it">Immagine Softimage PIC</comment>
+ <comment xml:lang="ko">Softimage PIC 그림</comment>
+ <comment xml:lang="lt">Softimage PIC paveikslas</comment>
+ <comment xml:lang="nl">Softimage PIC-image</comment>
+ <comment xml:lang="nn">Softimage PIC-bilete</comment>
+ <comment xml:lang="pl">Obraz Softimage PIC</comment>
+ <comment xml:lang="pt">Imagem PIC da Softimage</comment>
+ <comment xml:lang="pt_BR">Imagem PIC da Softimage</comment>
+ <comment xml:lang="ro">imagine Softimage PIC</comment>
+ <comment xml:lang="sl">Slika Softimage PIC</comment>
+ <comment xml:lang="sv">Softimage PIC-bild</comment>
+ <comment xml:lang="tr">Softimage PIC resmi</comment>
+ <comment xml:lang="uk">зображення PIC Softimage</comment>
+ <comment xml:lang="vi">ảnh PIC Softimage</comment>
+ <comment xml:lang="zh_CN">Softimage PIC 图像</comment>
+ <magic priority="80">
+ <match value="0x5380f634" type="big32" offset="0"/>
+ </magic>
+ <glob pattern="*.pic"/>
+ </mime-type>
+ <mime-type type="text/x-qml"> <!-- *.qmltypes and *.qmlproject added to fdo smi > 1.3 -->
+ <comment>Qt Markup Language file</comment>
+ <comment xml:lang="ar">ملف لغة الوصف Qt</comment>
+ <comment xml:lang="az">Qt Markup dil faylı</comment>
+ <comment xml:lang="be">Файл мовы разметкі Qt</comment>
+ <comment xml:lang="ca">Fitxer de llenguatge de marques de les Qt</comment>
+ <comment xml:lang="cs">Soubor Qt Markup Language</comment>
+ <comment xml:lang="de">Qt-Markup-Language-Datei</comment>
+ <comment xml:lang="el">Αρχείο γλώσσας σήμανσης Qt</comment>
+ <comment xml:lang="en_GB">Qt Markup Language file</comment>
+ <comment xml:lang="es">Archivo de lenguaje de marcas de Qt</comment>
+ <comment xml:lang="eu">Qt markatzeko lengoaiako fitxategia</comment>
+ <comment xml:lang="fi">Qt-merkintäkielitiedosto</comment>
+ <comment xml:lang="fr">Fichier de langage à balises pour Qt</comment>
+ <comment xml:lang="hi">क्यूट मार्कअप लैंग्वेज फ़ाइल</comment>
+ <comment xml:lang="hu">Qt Markup Language fájl</comment>
+ <comment xml:lang="ia">Le de linguage de marcation de QT</comment>
+ <comment xml:lang="it">File di linguaggio di contrassegno di Qt</comment>
+ <comment xml:lang="ko">Qt 마크업 언어 파일</comment>
+ <comment xml:lang="lt">Qt ženklinimo kalbos failas</comment>
+ <comment xml:lang="nl">Qt Markup Language-bestand</comment>
+ <comment xml:lang="nn">Qt-oppmerkingsspråk</comment>
+ <comment xml:lang="pl">Plik języka znaczników dla Qt</comment>
+ <comment xml:lang="pt">Ficheiro na Qt Markup Language</comment>
+ <comment xml:lang="pt_BR">Arquivo da Qt Markup Language</comment>
+ <comment xml:lang="ro">fișier cu limbaj de marcare Qt</comment>
+ <comment xml:lang="sl">Datoteka označevalnega jezika Qt (QML)</comment>
+ <comment xml:lang="sv">Qt-taggspråkfil</comment>
+ <comment xml:lang="tr">Qt İşaretleme Dili dosyası</comment>
+ <comment xml:lang="uk">файл мови розмітки Qt</comment>
+ <comment xml:lang="vi">tệp Ngôn ngữ Đánh dấu Qt</comment>
+ <comment xml:lang="zh_CN">Qt 标记语言文件</comment>
+ <magic priority="80">
+ <match type="string" value="import Qt " offset="0:256"/>
+ </magic>
+ <glob pattern="*.qml"/>
+ <glob pattern="*.qmltypes"/>
+ <glob pattern="*.qmlproject"/>
+ </mime-type>
+ <mime-type type="application/vnd.kde.kcfg">
+ <comment>KConfigXT Configuration Options</comment>
+ <comment xml:lang="ar">خيارات ضبط KConfigXT</comment>
+ <comment xml:lang="az">KConfigXT konfiqurasiya seçimləri</comment>
+ <comment xml:lang="be">Налады KConfigXT</comment>
+ <comment xml:lang="ca">Opcions de configuració del KConfigXT</comment>
+ <comment xml:lang="cs">Možnosti nastavení KConfigXT</comment>
+ <comment xml:lang="de">KConfigXT-Einrichtungsoptionen</comment>
+ <comment xml:lang="el">Επιλογές διαμόρφωσης KConfigXT</comment>
+ <comment xml:lang="en_GB">KConfigXT Configuration Options</comment>
+ <comment xml:lang="es">Opciones de configuración de KConfigXT</comment>
+ <comment xml:lang="eu">KConfigXT konfiguratzeko aukerak</comment>
+ <comment xml:lang="fi">KConfigXT-asetusvalinnat</comment>
+ <comment xml:lang="fr">Options de configuration pour KConfigXT</comment>
+ <comment xml:lang="hi">के-कोंफिग-एक्सटी विन्यास विकल्प</comment>
+ <comment xml:lang="hu">KConfigXT konfigurációs beállítások</comment>
+ <comment xml:lang="ia">KConfigXT Optiones de Configuration</comment>
+ <comment xml:lang="it">Opzioni di configurazione KConfigXT</comment>
+ <comment xml:lang="ko">KConfigXT 설정 옵션</comment>
+ <comment xml:lang="lt">KConfigXT konfigūravimo parinktys</comment>
+ <comment xml:lang="nl">Configuratie-opties van KConfigXT</comment>
+ <comment xml:lang="nn">KConfigXT-oppsett</comment>
+ <comment xml:lang="pl">Ustawienia KConfigXT</comment>
+ <comment xml:lang="pt">Opções de Configuração do KConfigXT</comment>
+ <comment xml:lang="pt_BR">Opções de configuração do KConfigXT</comment>
+ <comment xml:lang="ro">opțiuni de configurare KConfigXT</comment>
+ <comment xml:lang="sl">Nastavitvene možnosti KConfigXT</comment>
+ <comment xml:lang="sv">KConfigXT-inställningsalternativ</comment>
+ <comment xml:lang="tr">KConfigXT Yapılandırma Seçenekleri</comment>
+ <comment xml:lang="uk">параметри налаштування KConfigXT</comment>
+ <comment xml:lang="vi">các lựa chọn cấu hình KConfigXT</comment>
+ <comment xml:lang="zh_CN">KConfigXT 配置选项</comment>
+ <generic-icon name="application-xml"/> <!-- placeholder until there is an own icon -->
+ <sub-class-of type="application/xml"/>
+ <magic priority="80">
+ <match type="string" value="<!DOCTYPE kcfg" offset="0:256"/>
+ </magic>
+ <root-XML namespaceURI="http://www.kde.org/standards/kcfg/1.0" localName="kcfg"/>
+ <glob pattern="*.kcfg"/>
+ </mime-type>
+ <mime-type type="application/vnd.kde.kcfgc">
+ <comment>KConfigXT Code Generation Options</comment>
+ <comment xml:lang="ar">خيارات توليد رمز KConfigXT</comment>
+ <comment xml:lang="az">KConfigXT kod yaratma seçimləri</comment>
+ <comment xml:lang="be">Налады для стварэння кода KConfigXT</comment>
+ <comment xml:lang="ca">Opcions de generació de codi del KConfigXT</comment>
+ <comment xml:lang="cs">Volby generování kódu KConfigXT</comment>
+ <comment xml:lang="de">KConfigXT-Optionen zur Quelltexterzeugung</comment>
+ <comment xml:lang="el">Επιλογές γεννήτρια κώδικα KConfigXT</comment>
+ <comment xml:lang="en_GB">KConfigXT Code Generation Options</comment>
+ <comment xml:lang="es">Opciones de generación de código de KConfigXT</comment>
+ <comment xml:lang="eu">KConfigXT kodea sortzeko aukerak</comment>
+ <comment xml:lang="fi">KConfigXT-koodinluontivalinnat</comment>
+ <comment xml:lang="fr">Options de génération de code pour KConfigXT</comment>
+ <comment xml:lang="hi">के-कोंफिग-एक्सटी कोड उत्पादन विकल्प</comment>
+ <comment xml:lang="hu">KConfigXT kódgenerálási beállítások</comment>
+ <comment xml:lang="ia">KConfigXT Optiones de Generation de Codice</comment>
+ <comment xml:lang="it">Opzioni di generazione codice KConfigXT</comment>
+ <comment xml:lang="ko">KConfigXT 코드 생성 옵션</comment>
+ <comment xml:lang="lt">KConfigXT kodo generavimo parinktys</comment>
+ <comment xml:lang="nl">Codegeneratie-opties van KConfigXT</comment>
+ <comment xml:lang="nn">KConfigXT-kodegeneringsval</comment>
+ <comment xml:lang="pl">Ustawienia do tworzenia kodu KConfigXT</comment>
+ <comment xml:lang="pt">Opções de Geração de Código do KConfigXT</comment>
+ <comment xml:lang="pt_BR">Opções de geração de código do KConfigXT</comment>
+ <comment xml:lang="ro">opțiuni de generare a codului KConfigXT</comment>
+ <comment xml:lang="sl">Možnosti ustvarjanja kode KConfigXT</comment>
+ <comment xml:lang="sv">KConfigXT-kodgenereringsalternativ</comment>
+ <comment xml:lang="tr">KConfigXT Kod Oluşturma Seçenekleri</comment>
+ <comment xml:lang="uk">параметри створення коду KConfigXT</comment>
+ <comment xml:lang="vi">các lựa chọn tạo mã KConfigXT</comment>
+ <comment xml:lang="zh_CN">KConfigXT 代码生成选项</comment>
+ <generic-icon name="text-plain"/>
+ <sub-class-of type="text/plain"/>
+ <glob pattern="*.kcfgc"/>
+ </mime-type>
+ <mime-type type="application/vnd.kde.kxmlguirc">
+ <comment>KXMLGUI UI Declaration</comment>
+ <comment xml:lang="ar">تعريف عناصر واجهة KXMLGUI</comment>
+ <comment xml:lang="az">KXMLGUI UI Deklarasiyası</comment>
+ <comment xml:lang="be">Дэкларацыя карыстацкага інтэрфейсу KXMLGUI</comment>
+ <comment xml:lang="ca">Declaració d'IU del KXMLGUI</comment>
+ <comment xml:lang="cs">Deklarace KXMLGUI UI</comment>
+ <comment xml:lang="de">KXMLGUI-UI-Deklaration</comment>
+ <comment xml:lang="el">Δήλωση KXMLGUI UI</comment>
+ <comment xml:lang="en_GB">KXMLGUI UI Declaration</comment>
+ <comment xml:lang="es">Declaración de interfaz de usuario de KXMLGUI</comment>
+ <comment xml:lang="eu">KXMLGUI UI deklarazioa</comment>
+ <comment xml:lang="fi">KXMLGUI-käyttöliittymäasettelu</comment>
+ <comment xml:lang="fr">Déclaration d'interface « KXMLGUI »</comment>
+ <comment xml:lang="hi">के-एक्सएमएल-जीयूआइ घोषणापत्र</comment>
+ <comment xml:lang="hu">KXMLGUI UI deklaráció</comment>
+ <comment xml:lang="ia">KXMLGUI UI Declaration</comment>
+ <comment xml:lang="it">Dichiarazione UI KXMLGUI</comment>
+ <comment xml:lang="ko">KXMLGUI UI 선언</comment>
+ <comment xml:lang="lt">KXMLGUI naudotojo sąsajos deklaracija</comment>
+ <comment xml:lang="nl">Declaratie van KXMLGUI UI</comment>
+ <comment xml:lang="nn">KXMLGUI UI-deklarasjon</comment>
+ <comment xml:lang="pl">Deklaracja KXMLGUI UI</comment>
+ <comment xml:lang="pt">Declaração de UI do KXMLGUI</comment>
+ <comment xml:lang="pt_BR">Declaração UI do KXMLGUI</comment>
+ <comment xml:lang="ro">declarație KXMLGUI UI</comment>
+ <comment xml:lang="sl">Deklaracija uporabniškega vmesnika KXMLGUI</comment>
+ <comment xml:lang="sv">KXMLGUI-användargränssnittsdeklaration</comment>
+ <comment xml:lang="tr">KXMLGUI UI Bildirimi</comment>
+ <comment xml:lang="uk">оголошення інтерфейсу KXMLGUI</comment>
+ <comment xml:lang="vi">khai báo UI KXMLGUI</comment>
+ <comment xml:lang="zh_CN">KXMLGUI 界面声明</comment>
+ <generic-icon name="application-xml"/> <!-- placeholder until there is an own icon -->
+ <sub-class-of type="application/xml"/>
+ <magic priority="80">
+ <match type="string" value="<!DOCTYPE gui" offset="0:256"/>
+ <match type="string" value="<!DOCTYPE kpartgui" offset="0:256"/>
+ </magic>
+ <root-XML namespaceURI="https://www.kde.org/standards/kxmlgui/1.0" localName="gui"/>
+ <glob pattern="*.rc"/>
+ </mime-type>
+ <mime-type type="application/vnd.kde.knotificationrc">
+ <comment>KNotification Declaration</comment>
+ <comment xml:lang="ar">تعريف KNotification</comment>
+ <comment xml:lang="az">KNotification Deklarasiyası</comment>
+ <comment xml:lang="be">Дэкларацыя KNotification</comment>
+ <comment xml:lang="ca">Declaració del KNotification</comment>
+ <comment xml:lang="de">KNotification-Deklaration</comment>
+ <comment xml:lang="el">Δήλωση KNotification</comment>
+ <comment xml:lang="en_GB">KNotification Declaration</comment>
+ <comment xml:lang="es">Declaración de KNotification</comment>
+ <comment xml:lang="eu">KNotification-eko deklarazioa</comment>
+ <comment xml:lang="fr">Déclaration de KNotification</comment>
+ <comment xml:lang="hi">के-नोटिफिकेशन घोषणापत्र</comment>
+ <comment xml:lang="hu">KNotification deklaráció</comment>
+ <comment xml:lang="ia">KNotification Declaration</comment>
+ <comment xml:lang="it">Dichiarazione KNotification</comment>
+ <comment xml:lang="ko">KNotification 선언</comment>
+ <comment xml:lang="lt">KNotification deklaracija</comment>
+ <comment xml:lang="nl">Declaratie van KNotification</comment>
+ <comment xml:lang="nn">KNotification-deklarasjon</comment>
+ <comment xml:lang="pl">Deklaracja KNotification</comment>
+ <comment xml:lang="pt">Declaração do KNotification</comment>
+ <comment xml:lang="pt_BR">Declaração do KNotification</comment>
+ <comment xml:lang="ro">declarație KNotification</comment>
+ <comment xml:lang="sl">Deklaracija KNotification</comment>
+ <comment xml:lang="sv">KNotification-deklaration</comment>
+ <comment xml:lang="tr">KNotification Beyanı</comment>
+ <comment xml:lang="uk">оголошення KNotification</comment>
+ <comment xml:lang="vi">khai báo KNotification</comment>
+ <comment xml:lang="zh_CN">Knotification 声明</comment>
+ <generic-icon name="text-plain"/> <!-- placeholder until there is an own icon -->
+ <sub-class-of type="text/plain"/>
+ <glob pattern="*.notifyrc"/>
+ </mime-type>
+ <mime-type type="text/vnd.kde.kcrash-report">
+ <comment>KCrash Report</comment>
+ <comment xml:lang="ar">تقرير KCrash </comment>
+ <comment xml:lang="az">KCrash Hesabatı</comment>
+ <comment xml:lang="be">Справаздача KCrash</comment>
+ <comment xml:lang="ca">Informe del KCrash</comment>
+ <comment xml:lang="cs">Report KCrash</comment>
+ <comment xml:lang="de">KCrash-Bericht</comment>
+ <comment xml:lang="el">Αναφορά KCrash</comment>
+ <comment xml:lang="en_GB">KCrash Report</comment>
+ <comment xml:lang="es">Informe de KCrash</comment>
+ <comment xml:lang="eu">KCrash-eko txostena</comment>
+ <comment xml:lang="fi">KCrash-raportti</comment>
+ <comment xml:lang="fr">Rapport de KCrash</comment>
+ <comment xml:lang="hi">के-क्रॅश रिपोर्ट</comment>
+ <comment xml:lang="hu">KCrash jelentés</comment>
+ <comment xml:lang="ia">KCrash Reporto</comment>
+ <comment xml:lang="it">Rapporto di KCrash</comment>
+ <comment xml:lang="ko">KCrash 보고서</comment>
+ <comment xml:lang="lt">KCrash pranešimas</comment>
+ <comment xml:lang="nl">Rapport van KCrash</comment>
+ <comment xml:lang="nn">KCrash-rapport</comment>
+ <comment xml:lang="pl">Zgłoszenie KCrash</comment>
+ <comment xml:lang="pt">Relatório do KCrash</comment>
+ <comment xml:lang="pt_BR">Relatório do KCrash</comment>
+ <comment xml:lang="ro">raport KCrash</comment>
+ <comment xml:lang="sl">Poročilo KCrash</comment>
+ <comment xml:lang="sv">KCrash-rapport</comment>
+ <comment xml:lang="ta">KCrash அறிக்கை</comment>
+ <comment xml:lang="tr">KCrash Raporu</comment>
+ <comment xml:lang="uk">звіт KCrash</comment>
+ <comment xml:lang="vi">báo cáo KCrash</comment>
+ <comment xml:lang="zh_CN">KCrash 报告</comment>
+ <generic-icon name="text-plain"/>
+ <sub-class-of type="text/plain"/>
+ <glob pattern="*.kcrash"/>
+ <glob pattern="*.kcrash.txt"/>
+ </mime-type>
+</mime-info>
--- /dev/null
+remove_definitions(-DQT_NO_CAST_FROM_ASCII)
+
+find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS Widgets)
+if(NOT Qt5Widgets_FOUND)
+ message(STATUS "Qt5Widgets not found, examples will not be built.")
+ return()
+endif()
+
+add_executable(kdirwatchtest_gui kdirwatchtest_gui.cpp)
+target_link_libraries(kdirwatchtest_gui Qt5::Widgets KF5::CoreAddons)
+
+add_executable(faceicontest faceicontest.cpp)
+target_link_libraries(faceicontest Qt5::Widgets KF5::CoreAddons)
+
+add_executable(texttohtmltest ktexttohtmltest.cpp)
+target_link_libraries(texttohtmltest Qt5::Widgets KF5::CoreAddons)
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014 Nicolás Alvarez <nicolas.alvarez@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "faceicontest.h"
+
+#include <QApplication>
+#include <QListWidget>
+#include <QVBoxLayout>
+#include <kuser.h>
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ FaceIconTest *mainWin = new FaceIconTest();
+ mainWin->show();
+ return app.exec();
+}
+FaceIconTest::FaceIconTest()
+{
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ listWidget = new QListWidget(this);
+ layout->addWidget(listWidget);
+
+ const QList<KUser> users = KUser::allUsers();
+ for (const KUser &u : users) {
+ QPixmap pixmap(u.faceIconPath());
+ if (pixmap.isNull()) {
+ pixmap = QPixmap(QSize(48, 48));
+ pixmap.fill();
+ } else {
+ pixmap = pixmap.scaled(48, 48, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ }
+
+ QListWidgetItem *item = new QListWidgetItem(u.loginName(), listWidget);
+ item->setData(Qt::DecorationRole, pixmap);
+ }
+}
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2014 Nicolás Alvarez <nicolas.alvarez@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef FACEICONTEST_H
+#define FACEICONTEST_H
+
+#include <QWidget>
+
+class FaceIconTest : public QWidget
+{
+ Q_OBJECT
+public:
+ FaceIconTest();
+
+private:
+ class QListWidget *listWidget;
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1998 Sven Radej <sven@lisa.exp.univie.ac.at>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kdirwatchtest.h"
+
+#include <QCoreApplication>
+#include <QStringList>
+
+#include <QDebug>
+
+// TODO debug crash when calling "./kdirwatchtest ./kdirwatchtest"
+
+int main(int argc, char **argv)
+{
+ // TODO port to QCommandLineArguments once it exists
+ // options.add("+[directory ...]", qi18n("Directory(ies) to watch"));
+
+ QCoreApplication a(argc, argv);
+
+ myTest testObject;
+
+ KDirWatch *dirwatch1 = KDirWatch::self();
+ KDirWatch *dirwatch2 = new KDirWatch;
+
+ testObject.connect(dirwatch1, &KDirWatch::dirty, &myTest::dirty);
+ testObject.connect(dirwatch1, &KDirWatch::created, &myTest::created);
+ testObject.connect(dirwatch1, &KDirWatch::deleted, &myTest::deleted);
+
+ // TODO port to QCommandLineArguments once it exists
+ const QStringList args = a.arguments();
+ for (int i = 1; i < args.count(); ++i) {
+ const QString arg = args.at(i);
+ if (!arg.startsWith("-")) {
+ qDebug() << "Watching: " << arg;
+ dirwatch2->addDir(arg);
+ }
+ }
+
+ QString home = QString(getenv("HOME")) + '/';
+ QString desk = home + "Desktop/";
+ qDebug() << "Watching: " << home;
+ dirwatch1->addDir(home);
+ qDebug() << "Watching file: " << home << "foo ";
+ dirwatch1->addFile(home + "foo");
+ qDebug() << "Watching: " << desk;
+ dirwatch1->addDir(desk);
+ QString test = home + "test/";
+ qDebug() << "Watching: (but skipped) " << test;
+ dirwatch1->addDir(test);
+
+ dirwatch1->startScan();
+ dirwatch2->startScan();
+
+ if (!dirwatch1->stopDirScan(home)) {
+ qDebug() << "stopDirscan: " << home << " error!";
+ }
+ if (!dirwatch1->restartDirScan(home)) {
+ qDebug() << "restartDirScan: " << home << "error!";
+ }
+ if (!dirwatch1->stopDirScan(test)) {
+ qDebug() << "stopDirScan: error";
+ }
+
+ KDirWatch::statistics();
+
+ delete dirwatch2;
+
+ KDirWatch::statistics();
+
+ return a.exec();
+}
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1998 Sven Radej <sven@lisa.exp.univie.ac.at>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef _KDIRWATCHTEST_H_
+#define _KDIRWATCHTEST_H_
+
+#include <QObject>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "kdirwatch.h"
+
+class myTest : public QObject
+{
+ Q_OBJECT
+public:
+ myTest()
+ {
+ }
+public Q_SLOTS:
+ void dirty(const QString &a)
+ {
+ printf("Dirty: %s\n", a.toLocal8Bit().constData());
+ }
+ void created(const QString &f)
+ {
+ printf("Created: %s\n", f.toLocal8Bit().constData());
+ }
+ void deleted(const QString &f)
+ {
+ printf("Deleted: %s\n", f.toLocal8Bit().constData());
+ }
+};
+
+#endif
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2006 Dirk Stoecker <kde@dstoecker.de>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include "kdirwatchtest_gui.h"
+
+#include <QApplication>
+#include <QDir>
+#include <QLabel>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QTextBrowser>
+#include <QVBoxLayout>
+#include <kdirwatch.h>
+#include <qplatformdefs.h>
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ KDirWatchTest_GUI *mainWin = new KDirWatchTest_GUI();
+ mainWin->show();
+ return app.exec();
+}
+
+KDirWatchTest_GUI::KDirWatchTest_GUI()
+ : QWidget()
+{
+ QPushButton *e, *f;
+
+ QVBoxLayout *lay = new QVBoxLayout(this);
+ lay->setContentsMargins(0, 0, 0, 0);
+ lay->addWidget(l1 = new QLineEdit(QLatin1String("Test 1"), this));
+ lay->addWidget(l2 = new QLineEdit(QLatin1String("Test 2"), this));
+ lay->addWidget(l3 = new QLineEdit(QLatin1String("Test 3"), this));
+ lay->addWidget(m_eventBrowser = new QTextBrowser(this));
+ lay->addWidget(d = new QLineEdit(QLatin1String("Status"), this));
+ lay->addWidget(e = new QPushButton(QLatin1String("new file"), this));
+ lay->addWidget(f = new QPushButton(QLatin1String("delete file"), this));
+
+ dir = QDir::currentPath();
+ file = dir + QLatin1String("/testfile_kdirwatchtest_gui");
+
+ w1 = new KDirWatch();
+ w1->setObjectName(QLatin1String("w1"));
+ w2 = new KDirWatch();
+ w2->setObjectName(QLatin1String("w2"));
+ w3 = new KDirWatch();
+ w3->setObjectName(QLatin1String("w3"));
+ connect(w1, &KDirWatch::dirty, this, &KDirWatchTest_GUI::slotDir1);
+ connect(w2, &KDirWatch::dirty, this, &KDirWatchTest_GUI::slotDir2);
+ connect(w3, &KDirWatch::dirty, this, &KDirWatchTest_GUI::slotDir3);
+ w1->addDir(dir);
+ w2->addDir(dir);
+ w3->addDir(dir);
+
+ KDirWatch *w4 = new KDirWatch(this);
+ w4->setObjectName(QLatin1String("w4"));
+ w4->addDir(dir, KDirWatch::WatchFiles | KDirWatch::WatchSubDirs);
+ connect(w1, &KDirWatch::dirty, this, &KDirWatchTest_GUI::slotDirty);
+ connect(w1, &KDirWatch::created, this, &KDirWatchTest_GUI::slotCreated);
+ connect(w1, &KDirWatch::deleted, this, &KDirWatchTest_GUI::slotDeleted);
+
+ KDirWatch *w5 = new KDirWatch(this);
+ w5->setObjectName(QLatin1String(QLatin1String("w5")));
+ w5->addFile(file);
+ connect(w5, &KDirWatch::dirty, this, &KDirWatchTest_GUI::slotDirty);
+ connect(w5, &KDirWatch::created, this, &KDirWatchTest_GUI::slotCreated);
+ connect(w5, &KDirWatch::deleted, this, &KDirWatchTest_GUI::slotDeleted);
+
+ lay->addWidget(new QLabel(QLatin1String("Directory = ") + dir, this));
+ lay->addWidget(new QLabel(QLatin1String("File = ") + file, this));
+
+ connect(e, &QPushButton::clicked, this, &KDirWatchTest_GUI::slotNewClicked);
+ connect(f, &QPushButton::clicked, this, &KDirWatchTest_GUI::slotDeleteClicked);
+
+ setMinimumWidth(800);
+ setMinimumHeight(400);
+}
+
+void KDirWatchTest_GUI::slotDir1(const QString &a)
+{
+ l1->setText(QLatin1String("Test 1 changed ") + a + QLatin1String(" at ") + QTime::currentTime().toString());
+}
+
+void KDirWatchTest_GUI::slotDir2(const QString &a)
+{
+ // This used to cause bug #119341, fixed now
+#if 1
+ w2->stopDirScan(QLatin1String(a.toLatin1().constData()));
+ w2->restartDirScan(QLatin1String(a.toLatin1().constData()));
+#endif
+ l2->setText(QLatin1String("Test 2 changed ") + a + QLatin1String(" at ") + QTime::currentTime().toString());
+}
+
+void KDirWatchTest_GUI::slotDir3(const QString &a)
+{
+ l3->setText(QLatin1String("Test 3 changed ") + a + QLatin1String(" at )") + QTime::currentTime().toString());
+}
+
+void KDirWatchTest_GUI::slotDeleteClicked()
+{
+ remove(file.toLatin1().constData());
+ d->setText(QLatin1String("Delete clicked at ") + QTime::currentTime().toString());
+}
+
+void KDirWatchTest_GUI::slotNewClicked()
+{
+ fclose(QT_FOPEN(file.toLatin1().constData(), "wb"));
+ d->setText(QLatin1String("New clicked at ") + QTime::currentTime().toString());
+}
+
+void KDirWatchTest_GUI::slotDirty(const QString &path)
+{
+ m_eventBrowser->append(QLatin1String("Dirty(") + sender()->objectName() + QLatin1String("): ") + path + QLatin1Char('\n'));
+}
+
+void KDirWatchTest_GUI::slotCreated(const QString &path)
+{
+ m_eventBrowser->append(QLatin1String("Created(") + sender()->objectName() + QLatin1String("): ") + path + QLatin1Char('\n'));
+}
+
+void KDirWatchTest_GUI::slotDeleted(const QString &path)
+{
+ m_eventBrowser->append(QLatin1String("Deleted(") + sender()->objectName() + QLatin1String("): ") + path + QLatin1Char('\n'));
+}
--- /dev/null
+// krazy:excludeall=qclasses
+/*
+ SPDX-FileCopyrightText: 2006 Dirk Stoecker <kde@dstoecker.de>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#ifndef KDIRWATCHTEST_GUI_H
+#define KDIRWATCHTEST_GUI_H
+
+#include <QDialog>
+
+class QTextBrowser;
+
+class KDirWatchTest_GUI : public QWidget
+{
+ Q_OBJECT
+public:
+ KDirWatchTest_GUI();
+protected Q_SLOTS:
+ void slotNewClicked();
+ void slotDeleteClicked();
+ void slotDir1(const QString &path);
+ void slotDir2(const QString &path);
+ void slotDir3(const QString &path);
+ void slotDirty(const QString &);
+ void slotCreated(const QString &);
+ void slotDeleted(const QString &);
+
+private:
+ class QLineEdit *d;
+ QString file, dir;
+ class KDirWatch *w1;
+ class KDirWatch *w2;
+ class KDirWatch *w3;
+ class QLineEdit *l1, *l2, *l3;
+ QTextBrowser *m_eventBrowser;
+};
+
+#endif
--- /dev/null
+/*
+ This file is part of the KDE libraries
+
+ SPDX-FileCopyrightText: 1999 Waldo Bastian <bastian@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-only
+*/
+
+#include <QList>
+#include <QString>
+
+#include "krandom.h"
+#include "krandomsequence.h"
+
+#include <stdio.h>
+
+int main(/*int argc, char *argv[]*/)
+{
+ long seed;
+ KRandomSequence seq;
+
+ seed = 2;
+ seq.setSeed(seed);
+ printf("Seed = %4ld :", seed);
+ for (int i = 0; i < 20; i++) {
+ printf("%3ld ", seq.getLong(100));
+ }
+ printf("\n");
+
+ seed = 0;
+ seq.setSeed(seed);
+ printf("Seed = %4ld :", seed);
+ for (int i = 0; i < 20; i++) {
+ printf("%3ld ", seq.getLong(100));
+ }
+ printf("\n");
+
+ seed = 0;
+ seq.setSeed(seed);
+ printf("Seed = %4ld :", seed);
+ for (int i = 0; i < 20; i++) {
+ printf("%3ld ", seq.getLong(100));
+ }
+ printf("\n");
+
+ seed = 2;
+ seq.setSeed(seed);
+ printf("Seed = %4ld :", seed);
+ for (int i = 0; i < 20; i++) {
+ printf("%3ld ", seq.getLong(100));
+ }
+ printf("\n");
+
+ seq.setSeed(KRandom::random());
+
+ QList<QString> list;
+ list.append(QLatin1String("A"));
+ list.append(QLatin1String("B"));
+ list.append(QLatin1String("C"));
+ list.append(QLatin1String("D"));
+ list.append(QLatin1String("E"));
+ list.append(QLatin1String("F"));
+ list.append(QLatin1String("G"));
+
+ for (QList<QString>::Iterator str = list.begin(); str != list.end(); ++str) {
+ printf("%s", str->toLatin1().data());
+ }
+ printf("\n");
+
+ seq.randomize(list);
+
+ for (QList<QString>::Iterator str = list.begin(); str != list.end(); ++str) {
+ printf("%s", str->toLatin1().data());
+ }
+ printf("\n");
+
+ seq.randomize(list);
+
+ for (QList<QString>::Iterator str = list.begin(); str != list.end(); ++str) {
+ printf("%s", str->toLatin1().data());
+ }
+ printf("\n");
+
+ seq.randomize(list);
+
+ for (QList<QString>::Iterator str = list.begin(); str != list.end(); ++str) {
+ printf("%s", str->toLatin1().data());
+ }
+ printf("\n");
+}
--- /dev/null
+/*
+ SPDX-FileCopyrightText: 2021 Friedrich W. H. Kossebau <kossebau@kde.org>
+
+ SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include <KTextToHTML>
+
+#include <QApplication>
+#include <QHBoxLayout>
+#include <QMainWindow>
+#include <QTextBrowser>
+#include <QTimer>
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ auto *window = new QMainWindow;
+
+ auto *mainWidget = new QWidget;
+ window->setCentralWidget(mainWidget);
+
+ auto *layout = new QHBoxLayout;
+ mainWidget->setLayout(layout);
+
+ auto *plaintextEditor = new QTextEdit;
+ plaintextEditor->setAcceptRichText(false);
+ layout->addWidget(plaintextEditor);
+
+ auto *htmlView = new QTextBrowser;
+ layout->addWidget(htmlView);
+
+ auto *updateTimer = new QTimer(&app);
+ updateTimer->setSingleShot(true);
+ updateTimer->setInterval(1000);
+ QObject::connect(updateTimer, &QTimer::timeout, plaintextEditor, [plaintextEditor, htmlView]() {
+ const QString html = KTextToHTML::convertToHtml(plaintextEditor->toPlainText(), KTextToHTML::Options());
+ htmlView->setHtml(html);
+ });
+
+ QObject::connect(plaintextEditor, &QTextEdit::textChanged, updateTimer, qOverload<>(&QTimer::start));
+
+ window->show();
+
+ return app.exec();
+}